Files
Dario Sassi 97836125a7 OmagCUT 2.7k1 :
- in tastatura utensile corretta assegnazione flag CMD.ISSAW
- in trasmissione part-program a Fanuc non si eliminano più le linee con M98<...>
- all'avvio programma non si scrivono più nelle note della lama corrente i valori appena letti da queste.
2025-11-04 13:26:06 +01:00

1720 lines
53 KiB
VB.net

Imports System.IO
Imports System.Runtime.InteropServices
' *****
Imports EgtUILib
' *****
Module M_Fanuc
#Region " Classes"
#End Region
#Region " Enum"
Public Enum CNC_Connection_Status_Type
NOT_CONNECTED = 1
CONNECTED = 2
End Enum
Public Enum CNC_Connection_Type
HSSB = 1
Ethernet = 2
End Enum
'PMC Area Type Mapping
Public Enum PMCAreaType As Short
G_AREA = 0
F_AREA = 1
Y_AREA = 2
X_AREA = 3
A_AREA = 4
R_AREA = 5
T_AREA = 6
K_AREA = 7
C_AREA = 8
D_AREA = 9
End Enum
#End Region
#Region " Constants"
Const N_BYTE_TYPE As Short = 0
Const N_INT_TYPE As Short = 1
Const N_LONG_TYPE As Short = 2
Const CUSTOM_MACRO_SIZE = 10
Const BLOCK_SIZE = 256
Const ONE_DATA_ONLY As Integer = 1
Const ERR_READ_MACRO_EXPON As Integer = -9000
Const MAX_CNC_ALM_MSG As Short = 10 ' max number of alarms
Const MAX_OPERATOR_ALM_MSG As Short = 5 ' max number of messages
Const ALL_ALARM_TYPE As Short = -1
Const ALL_OP_MSG_TYPE As Short = -1
Const ALL_AXES As Short = -1
Public Const BAD_RETURN As Long = -99999
Public Const BAD_RETURN_SH As Short = -999
#End Region
#Region " Structures"
Public Structure CNC_Info_Type
Dim name As String
Dim IPAddress As String
Dim Port As Short
Dim Timeout As Integer
Dim Handle As UShort
Dim ConnectionStatus As CNC_Connection_Status_Type
Dim ConnectionType As CNC_Connection_Type
Dim Node_number As Long
End Structure
#End Region
#Region " Variabili "
Private b_OM_pos As Boolean = True
Public cnc_info As CNC_Info_Type
Public bSimulation As Boolean
Public b_machine_in_inches As Boolean
Private h_last_cnc_info_handle As UShort
Private h_Session As UShort ' Handle
Public AlarmMessage(MAX_CNC_ALM_MSG) As String
Public AlarmNumber(MAX_CNC_ALM_MSG) As Integer
Public AlarmMessageCount As Short
Public OperatorMessage(MAX_CNC_ALM_MSG) As String
Public OperatorMsgNumber(MAX_CNC_ALM_MSG) As Short
Public OperatorMessageCount As Short
Public sz_Err_Msg As String
Public n_ret_code As Short
Public sz_NC_type As String
Public lst_plc_messages As New List(Of String)
Public l_pos_values(Focas1.MAX_AXIS) As Long
Public l_delta_values(Focas1.MAX_AXIS) As Long
Private values() As Double = Nothing
Private b_debugf As Boolean = False
#End Region
#Region " Connect"
Function NC_connect(ByRef machine_cnc_info As CNC_Info_Type) As Int16
With cnc_info
sz_Err_Msg = ""
If bSimulation Then
Return Focas1.EW_OK
.ConnectionStatus = CNC_Connection_Status_Type.CONNECTED
sz_Err_Msg = " !! simulazione CN... "
EgtOutLog(sz_Err_Msg)
Else
n_ret_code = Focas1.EW_SYSTEM2 ' tanto per dirne una
If b_debugf Then
sz_Err_Msg = " .IPAddress " & .IPAddress & " - " & " .Port " & .Port & " - " & " .Handle " & .Handle & " - " & " .Timeout " & .Timeout
EgtOutLog(sz_Err_Msg)
End If ' debug
If .ConnectionType = CNC_Connection_Type.HSSB Then
Try
n_ret_code = Focas1.cnc_allclibhndl2(.Node_number, .Handle)
Catch e As Exception
sz_Err_Msg = "Error in M_fanuc - NCConnect HSSB" & " .Handle " & .Handle & "- ret code = " & n_ret_code.ToString & Environment.NewLine & e.Message
EgtOutLog(sz_Err_Msg)
End Try
Else
Try
n_ret_code = -99
n_ret_code = Focas1.cnc_allclibhndl3(.IPAddress, .Port, .Timeout, .Handle)
Catch e As Exception
sz_Err_Msg = "Error in M_fanuc - NCConnect Eth " & .IPAddress & " - " & " .Port " & .Port & " - " & " .Handle " & .Handle & "- ret code = " & n_ret_code.ToString & Environment.NewLine & e.Message
EgtOutLog(sz_Err_Msg)
End Try
End If
' EgtOutLog(" *** Focas1.cnc_allclibhndl3: " & n_ret_code)
h_last_cnc_info_handle = .Handle
h_Session = .Handle
#If False Then
Dim vafbus As Focas1.ODBST
n_ret_code = Focas1.cnc_statinfo(h_Session, vafbus)
Dim odbaxis As Focas1.ODBAXIS = Nothing ' defaults to 8 in fwlib32.vb
Dim n_size As Short
sz_Err_Msg = ""
n_size = 4 + 32 * 4 ' 4 + 4 * 8
' n_ret_code = Focas1.cnc_relative2(h_Session, 1, n_size, odbaxis)
'n_ret_code = Focas1.cnc_absolute2(h_Session, 1, n_size, odbaxis)
n_ret_code = Focas1.cnc_machine(h_Session, ALL_AXES, n_size, odbaxis)
If n_ret_code = Focas1.EW_OK Then
For n As Short = 0 To Focas1.MAX_AXIS - 1
l_pos_values(n) = odbaxis.data(n)
Next
End If
#End If
If (n_ret_code = Focas1.EW_OK) Then
lst_plc_messages.Clear()
Dim sz_temp As String = ""
n_ret_code = F_Get_current_NC_dir(sz_temp)
If n_ret_code <> Focas1.EW_OK Then Return n_ret_code
.ConnectionStatus = CNC_Connection_Status_Type.CONNECTED
Return Focas1.EW_OK
Else
sz_Err_Msg = "Error in NC_connect " & Fanuc_error_codes(n_ret_code)
Return n_ret_code
End If
End If
End With
End Function
Function NC_disconnect() As Int16
With cnc_info
If bSimulation Then
.ConnectionStatus = CNC_Connection_Status_Type.NOT_CONNECTED
Return Focas1.EW_OK
Else
h_last_cnc_info_handle = .Handle
n_ret_code = Focas1.cnc_freelibhndl(.Handle)
If (n_ret_code = Focas1.EW_OK) Then
.ConnectionStatus = CNC_Connection_Status_Type.NOT_CONNECTED
Return Focas1.EW_OK
Else
sz_Err_Msg = "Error in NC_disconnect " & Fanuc_error_codes(n_ret_code)
Return n_ret_code
End If
End If
End With
End Function
#End Region
#Region " Error codes"
Function Fanuc_error_codes(ByVal ncod As Integer) As String
Dim odber As Focas1.ODBERR '
Dim n As Integer, sz_Fanuc_error_cods As String
sz_Fanuc_error_cods = "??????"
Select Case ncod
Case Focas1.EW_PROTOCOL
sz_Fanuc_error_cods = "EW_PROTOCOL : protocol error (-17)"
Case Focas1.EW_SOCKET
sz_Fanuc_error_cods = "EW_SOCKET : Windows socket error (-16)"
Case Focas1.EW_NODLL
sz_Fanuc_error_cods = "EW_NODLL : DLL not exist error (-15)"
Case Focas1.EW_BUS
sz_Fanuc_error_cods = "EW_BUS : bus error (-11)"
Case Focas1.EW_SYSTEM2
sz_Fanuc_error_cods = "EW_SYSTEM2 : system error (-10)"
Case Focas1.EW_HSSB
sz_Fanuc_error_cods = "EW_HSSB : hssb communication error (-9)"
Case Focas1.EW_HANDLE
sz_Fanuc_error_cods = "EW_HANDLE : Windows library handle error (-8)"
Case Focas1.EW_VERSION
sz_Fanuc_error_cods = "EW_VERSION : EW_VERSION : CNC/PMC version mismatch (-7)"
Case Focas1.EW_UNEXP
sz_Fanuc_error_cods = "EW_UNEXP : abnormal error (-6)"
Case Focas1.EW_SYSTEM
sz_Fanuc_error_cods = "EW_SYSTEM : system error (-5)"
Case Focas1.EW_PARITY
sz_Fanuc_error_cods = "EW_PARITY : shared RAM parity error (-4)"
Case Focas1.EW_MMCSYS
sz_Fanuc_error_cods = "EW_MMCSYS : emm386 or mmcsys DRIVERS install error (-3)"
Case Focas1.EW_RESET
sz_Fanuc_error_cods = "EW_RESET : reset or stop occured error (-2)"
Case Focas1.EW_BUSY
sz_Fanuc_error_cods = "EW_BUSY : busy error (-1)"
Case Focas1.EW_OK
sz_Fanuc_error_cods = "no problem"
Case Focas1.EW_FUNC
sz_Fanuc_error_cods = "EW_FUNC : command prepare error OR pmc not exist (1)"
Case Focas1.EW_LENGTH
sz_Fanuc_error_cods = "EW_LENGTH : data block length error (2)"
Case Focas1.EW_NUMBER
sz_Fanuc_error_cods = "EW_NUMBER : data number error OR address range error (3)"
Case Focas1.EW_ATTRIB
sz_Fanuc_error_cods = " : data attribute error OR data type error (4)"
Case Focas1.EW_DATA
odber.err_dtno = ncod
' get detail error
n = Focas1.cnc_getdtailerr(h_last_cnc_info_handle, odber)
Select Case odber.err_no
Case 1
sz_Fanuc_error_cods = "EW_DATA 5-1: Illegal character in NC program"
Case 2
sz_Fanuc_error_cods = "EW_DATA 5-2: TV check, block with odd number of char"
Case 3
sz_Fanuc_error_cods = "EW_DATA 5-3: registered program count is full"
Case 4
sz_Fanuc_error_cods = "EW_DATA 5-4: program number already registered"
Case 5
sz_Fanuc_error_cods = "EW_DATA 5-5: same program selected on CNC"
Case Else
sz_Fanuc_error_cods = "EW_DATA : data error (5) - errno " & Str(odber.err_no)
End Select
Case Focas1.EW_NOOPT
sz_Fanuc_error_cods = "EW_NOOPT : no option error (6)"
Case Focas1.EW_PROT
sz_Fanuc_error_cods = "EW_PROT : write protect error (7)"
Case Focas1.EW_OVRFLOW
sz_Fanuc_error_cods = "EW_OVRFLOW : memory overflow error (8)"
Case Focas1.EW_PARAM
sz_Fanuc_error_cods = "EW_PARAM : cnc parameter not correct error (9)"
Case Focas1.EW_BUFFER
sz_Fanuc_error_cods = "EW_BUFFER : buffer error (10)"
Case Focas1.EW_PATH
sz_Fanuc_error_cods = "EW_PATH : path error (11)"
Case Focas1.EW_MODE
sz_Fanuc_error_cods = "EW_MODE : cnc mode error (12)"
Case Focas1.EW_REJECT
sz_Fanuc_error_cods = "EW_REJECT : execution rejected error (13)"
Case Focas1.EW_DTSRVR
sz_Fanuc_error_cods = "EW_DTSRVR : data server error (14)"
Case Focas1.EW_ALARM
sz_Fanuc_error_cods = "EW_ALARM : alarm has occurred (15)"
Case Focas1.EW_STOP
sz_Fanuc_error_cods = "EW_STOP : CNC is not running (16)"
Case Focas1.EW_PASSWD
sz_Fanuc_error_cods = "EW_PASSWD : protection data error (17)"
' my codes
Case ERR_READ_MACRO_EXPON
sz_Fanuc_error_cods = "ERR_READ_MACRO_EXPON : excess exponent in readmacro (-9000)"
End Select
Return sz_Fanuc_error_cods
End Function
'
' riorna true se file not found error...
'
Function fanuc_error_file_not_found(ByVal ncod As Integer) As Boolean
Dim odber As Focas1.ODBERR '
Dim n As Integer
If ncod = Focas1.EW_DATA Then
odber.err_dtno = ncod
n = Focas1.cnc_getdtailerr(h_last_cnc_info_handle, odber) ' get detail error
If odber.err_no = 2 Then ' Case 2 "EW_DATA 5-2: Specified folder cannot be found"
Return True
End If
End If
Return False
End Function
#End Region
#Region " Read/write vars"
' ---------------------------------------------------------
' Legge una serie di Bytes dall' area PLC
' ---------------------------------------------------------
Public Function F_Read_n_Bytes_From_PLC(ByVal nVar As Integer, ByVal PMC_area As PMCAreaType,
ByRef Buffer As Byte(), ByVal n_bytes As Integer) As Boolean
Dim iodb As Focas1.IODBPMC0 = Nothing
Dim nLength As Short
Dim n_s As UShort
Dim n_e As UShort
sz_Err_Msg = ""
If Not bSimulation Then ' simulazione ?
iodb.type_a = PMC_area
iodb.type_d = N_BYTE_TYPE
iodb.datano_s = nVar
iodb.datano_e = nVar + n_bytes - 1
n_s = nVar
n_e = nVar + n_bytes - 1
nLength = 8 + 1 * n_bytes
n_ret_code = Focas1.pmc_rdpmcrng(h_Session, PMC_area, N_BYTE_TYPE, n_s, n_e, nLength, iodb)
If (n_ret_code <> Focas1.EW_OK) Then
sz_Err_Msg = "Error on reading n_bytes from variable D " & Str(nVar) & " - " & Fanuc_error_codes(n_ret_code)
'szErrMsg = msg(119) & " " & Str(nVar) & " " & msg(120) & " " & Str(nError)
'MsgBox(szErrMsg)
Return False
End If
For n As Short = 0 To n_bytes - 1
Buffer(n) = iodb.cdata(n)
Next n
Else
End If ' simulazione
Return True
End Function
' ---------------------------------------------------------
' Legge una serie di short dall' area PLC
' ---------------------------------------------------------
Public Function F_Read_n_Int_From_PLC(ByVal nVar As Integer, ByVal PMC_area As Short,
ByRef Buffer As Short(), ByVal n_ints As Integer) As Boolean
Dim iodb As Focas1.IODBPMC1 = Nothing
Dim nLength As Short
Dim n_s As UShort
Dim n_e As UShort
' ReDim iodb.idata(10)
sz_Err_Msg = ""
If Not bSimulation Then ' simulazione ?
iodb.type_a = PMC_area
iodb.type_d = N_INT_TYPE
iodb.datano_s = nVar
n_s = nVar
n_e = nVar + (2 * n_ints) - 1
iodb.datano_e = n_e
nLength = 8 + (2 * n_ints)
n_ret_code = Focas1.pmc_rdpmcrng(h_Session, PMC_area, N_INT_TYPE, n_s, n_e, nLength, iodb)
If (n_ret_code <> Focas1.EW_OK) Then
sz_Err_Msg = "Error on reading n_int from variable D " & " - " & Fanuc_error_codes(n_ret_code)
'szErrMsg = msg(119) & " " & Str(nVar) & " " & msg(120) & " " & Str(nError)
'MsgBox(szErrMsg)
Return False
End If
For n As Short = 0 To n_ints - 1
Buffer(n) = iodb.idata(n)
Next n
Else
End If ' simulazione
Return True
End Function
' ---------------------------------------------------------
' Scrive una serie di Bytes nell' area PLC
' ---------------------------------------------------------
Public Function F_Write_n_Bytes_To_PLC(ByVal nVar As Integer, ByVal PMC_area As PMCAreaType,
ByRef Buffer As Byte(), ByVal n_bytes As Integer) As Boolean
Dim n As Integer, nLength As Integer
Dim iodb As Focas1.IODBPMC0 ' per scritture di bytes
'
sz_Err_Msg = ""
If Not bSimulation Then ' simulazione ?
iodb.type_a = PMC_area
iodb.type_d = N_BYTE_TYPE
iodb.datano_s = nVar
iodb.datano_e = nVar + n_bytes - 1
nLength = 8 + 1 * n_bytes
ReDim iodb.cdata(512)
iodb.cdata(0) = 0
For n = 0 To n_bytes - 1
iodb.cdata(n) = Buffer(n)
Next n
n_ret_code = Focas1.pmc_wrpmcrng(h_Session, nLength, iodb)
If (n_ret_code <> Focas1.EW_OK) Then
sz_Err_Msg = "Error on writing bytes of variable D " & Str(nVar) & " - " & Fanuc_error_codes(n_ret_code)
'szErrMsg = msg(121) & " " & Str(nVar) & " " & msg(120) & " " & Str(n_ret_code)
'MsgBox(szErrMsg)
Return False
End If
Else
End If ' simulazione
Return True
End Function
Public Function F_Write_n_Int_To_PLC(ByVal nVar As Integer, ByVal PMC_area As PMCAreaType,
ByRef Buffer As Short(), ByVal n_ints As Integer) As Boolean
Dim n As Integer, nLength As Integer
Dim iodb As Focas1.IODBPMC1 ' per scritture di ints
'
sz_Err_Msg = ""
If Not bSimulation Then ' simulazione ?
iodb.type_a = PMC_area
iodb.type_d = N_INT_TYPE
iodb.datano_s = nVar
iodb.datano_e = nVar + (2 * n_ints) - 1
nLength = 8 + (2 * n_ints)
ReDim iodb.idata(16)
iodb.idata(0) = 0
For n = 0 To n_ints - 1
iodb.idata(n) = Buffer(n)
Next n
n_ret_code = Focas1.pmc_wrpmcrng(h_Session, nLength, iodb)
If (n_ret_code <> Focas1.EW_OK) Then
sz_Err_Msg = "Error on writing ints of variable D " & Str(nVar) & " - " & Fanuc_error_codes(n_ret_code)
'szErrMsg = msg(121) & " " & Str(nVar) & " " & msg(120) & " " & Str(n_ret_code)
'MsgBox(szErrMsg)
Return False
End If
Else
End If ' simulazione
Return True
End Function
' ---------------------------------------------------------
' scrive una variabile macro (#) ( comprese le 98xxx)
' ---------------------------------------------------------
Function F_Write_macro(ByVal nVar As Integer, ByVal value As Double) As Boolean
Dim mcr_val As Long, dec_val As Integer, sz_routine As String = "-"
sz_Err_Msg = ""
If Not (bSimulation) Then ' se non simulazione
Try
If nVar >= &H8000 Then ' if var like 98xxx then use the other write routine .... ( :(( no comment )
ReDim values(1)
values(0) = value
sz_routine = "Focas.cnc_wrmacror2"
n_ret_code = Focas1.cnc_wrmacror2(h_Session, nVar, ONE_DATA_ONLY, values)
Else ' good ole boys
If b_machine_in_inches Then
mcr_val = CLng(value * 10000.0#)
dec_val = 4 ' 10 e-4
Else
mcr_val = CLng(value * 1000.0#)
dec_val = 3 ' 10 e-3
End If
sz_routine = "Focas.cnc_wrmacro"
n_ret_code = Focas1.cnc_wrmacro(h_Session, nVar, CUSTOM_MACRO_SIZE, mcr_val, dec_val)
End If ' var > 8000h
If (n_ret_code <> Focas1.EW_OK) Then ' Fanuc error
'Error writing parameter
sz_Err_Msg = "Error on writing # parameter " & Str(nVar) & " in " & sz_routine & " - " & Fanuc_error_codes(n_ret_code)
' sz_Err_Msg = msg(114) & " in " & sz_routine & " var #" & nVar.ToString & " : " & Fanuc_error_codes(n_ret_code)
' Log.Write_and_messagebox(sz_Err_Msg)
Return False
End If ' Fanuc error
Catch ex As Exception
sz_Err_Msg = "Error on writing # parameter " & Str(nVar) & " EXC in " & sz_routine & " - " & ex.Message & vbCrLf & ex.StackTrace
' sz_Err_Msg = msg(114) & " EXC in " & sz_routine & " var #" & nVar.ToString & " : " & vbCrLf & ex.Message & vbCrLf & ex.StackTrace
' Log.Write_and_messagebox(sz_Err_Msg)
Return False
End Try
Return True
Else
Return True ' simulazione
End If ' se non simulazione
End Function
' ---------------------------------------------------------
' legge una variabile macro (#)
' ---------------------------------------------------------
Function F_Read_macro(ByVal nVar As Integer, ByRef dValue As Double) As Boolean
Dim ODBM As Focas1.ODBM
Dim MacroInfo3 As Focas1.IODBMRN3 = Nothing
Dim sz_routine As String = "-", sz_temp As String = ""
sz_Err_Msg = ""
' se non simulazione
If Not (bSimulation) Then
Try
If nVar >= &H8000 Then ' if var like 98xxx then use the other read routine .... ( :(( no comment )
sz_routine = "Focas.cnc_rdmacror3"
' If IniRead.b_verbose Then Log.write("F_Read_macro 3 " & values(0).ToString)
n_ret_code = Focas1.cnc_rdmacror3(h_Session, nVar, ONE_DATA_ONLY, MacroInfo3)
' n_ret_code = Focas1.cnc_rdmacror2(h_Session, nVar, ONE_DATA_ONLY, values)
If (n_ret_code = Focas1.EW_OK) Then ' no Fanuc error
dValue = MacroInfo3.mcr_val
Else
'Error reading parameter :
sz_Err_Msg = "Error on reading # parameter " & Str(nVar) & " in " & sz_routine & " - " & Fanuc_error_codes(n_ret_code)
' sz_Err_Msg = msg(112) & " in " & sz_routine & " var # " & nVar.ToString & " : " & Fanuc_error_codes(n_ret_code)
' Log.Write_and_messagebox(sz_Err_Msg)
dValue = 0.0
Return False
End If ' no Fanuc error
Else ' good ole boys
' cnc_rdmacro : read custom macro variable
sz_routine = "Focas.cnc_rdmacro"
n_ret_code = Focas1.cnc_rdmacro(h_Session, nVar, CUSTOM_MACRO_SIZE, ODBM)
If (n_ret_code = Focas1.EW_OK) Then ' no Fanuc error
If ODBM.mcr_val = 0 And ODBM.dec_val = -1 Then ' variabile non definita
dValue = 0 '"Null"
Else
dValue = ODBM.mcr_val * (10 ^ -(ODBM.dec_val))
End If
Else
'Error reading parameter :
sz_Err_Msg = "Error on reading # parameter " & Str(nVar) & " in " & sz_routine & " - " & Fanuc_error_codes(n_ret_code)
' sz_Err_Msg = (msg(112) & " in " & sz_routine & " var # " & nVar.ToString & " : " & Fanuc_error_codes(n_ret_code))
' Log.Write_and_messagebox(sz_Err_Msg)
dValue = 0.0
Return False
End If ' no Fanuc error
End If ' var > 8000h
Catch ex As Exception
sz_Err_Msg = "Error on reading # parameter " & Str(nVar) & " EXC in " & sz_routine & " - " & ex.Message & vbCrLf & ex.StackTrace
' sz_Err_Msg = msg(112) & " EXC in " & sz_routine & " var #" & nVar.ToString & vbCrLf & ex.Message & vbCrLf & ex.StackTrace
' Log.Write_and_messagebox(sz_Err_Msg)
dValue = 0.0
Return False
End Try
Return True
Else
dValue = 0.0
Return True
End If ' simulation
End Function
#End Region
#Region " Alarms"
' ---------------------------------------------------------
' legge allarmi
' ---------------------------------------------------------
Public Function F_cnc_alarm() As Long
Dim l_alarm As Long = 0
sz_Err_Msg = ""
If Not bSimulation Then ' simulazione ?
n_ret_code = Focas1.cnc_alarm2(h_Session, l_alarm)
If (n_ret_code <> Focas1.EW_OK) Then ' no Fanuc error
sz_Err_Msg = "Error in F_cnc_alarm " & Str(l_alarm) & " - " & Fanuc_error_codes(n_ret_code)
'szErrMsg = msg(120) & " " & Str(n_ret_code)
'MsgBox(szErrMsg)
Return BAD_RETURN
Exit Function
End If ' no Fanuc error
Else
End If ' simulazione
Return l_alarm
End Function
'
' !!!!! probabilmente non funziona
'
Public Function F_get_cnc_alarms(ByVal n_alarm_type As Short) As String
' Const Alarm_information_type_1 As Short = 0 ' no message
Const Alarm_information_type_2 As Short = 1 ' with message
Const N_MSG = 5
Dim n_alarm_info_type As Short = Alarm_information_type_2 ' Or Alarm_information_type_1
' Dim alarm_info1 As Focas1.ALMINFO_1 = Nothing ' as defined as default in fwlib32.vb
Dim alarm_info2 As Focas1.ALMINFO_2 = Nothing ' as defined as default in fwlib32.vb
Dim n_length As Short
Dim sz_return As String
sz_Err_Msg = ""
sz_return = ""
If Not bSimulation Then ' simulazione ?
' If n_alarm_info_type = Alarm_information_type_1 Then
' n_length = 4 * N_MSG + 2 ' per 16/18/21 ; 16/18/21i ; 0i A/B/C ; Power mate i
' n_length = 8 * N_MSG + 4 ' per 30i ; Oi D/F ; PMi-A
' n_ret_code = Focas1.cnc_rdalminfo(h_Session, Alarm_information_type_1, n_alarm_type, n_length, alarm_info1)
' Else
' n_length = 38 * N_MSG + 2 ' per 16/18/21 ; 16/18/21i ; 0i A/B/C ; Power mate i
n_length = 40 * N_MSG + 4 ' per 30i ; Oi D/F ; PMi-A
n_ret_code = Focas1.cnc_rdalminfo(h_Session, Alarm_information_type_2, n_alarm_type, n_length, alarm_info2)
' End If
If (n_ret_code <> Focas1.EW_OK) Then
sz_Err_Msg = "Error in F_get_cnc_alarms " + Str(n_alarm_type) & " - " & Fanuc_error_codes(n_ret_code)
' szErrMsg = msg(120) & " " & Str(n_ret_code)
' MsgBox(szErrMsg)
Return BAD_RETURN.ToString
End If
With alarm_info2.msg1
If .axis <> -1 Then
sz_return = sz_return & " Alarm " & .alm_no.ToString & " - " & .alm_msg.Substring(0, .msg_len)
End If
End With
With alarm_info2.msg2
If .axis <> -1 Then
sz_return = sz_return & Environment.NewLine
sz_return = sz_return & " Alarm " & .alm_no.ToString & " - " & .alm_msg.Substring(0, .msg_len)
End If
End With
With alarm_info2.msg3
If .axis <> -1 Then
sz_return = sz_return & Environment.NewLine
sz_return = sz_return & " Alarm " & .alm_no.ToString & " - " & .alm_msg.Substring(0, .msg_len)
End If
End With
With alarm_info2.msg4
If .axis <> -1 Then
sz_return = sz_return & Environment.NewLine
sz_return = sz_return & " Alarm " & .alm_no.ToString & " - " & .alm_msg.Substring(0, .msg_len)
End If
End With
With alarm_info2.msg5
If .axis <> -1 Then
sz_return = sz_return & Environment.NewLine
sz_return = sz_return & " Alarm " & .alm_no.ToString & " - " & .alm_msg.Substring(0, .msg_len)
End If
End With
Else
End If ' simulazione
Return sz_return
End Function
Public Function F_get_cnc_alarms3() As Short
Dim n_AlmMsgCount As Short = 0
Dim odbAlm As Focas1.ODBALMMSG2 = Nothing ' defaults to 10 messages in fwlib32.vb
sz_Err_Msg = ""
If Not bSimulation Then ' simulazione ?
n_AlmMsgCount = MAX_CNC_ALM_MSG
odbAlm.msg1.dummy = 0
n_ret_code = Focas1.cnc_rdalmmsg2(h_Session, ALL_ALARM_TYPE, n_AlmMsgCount, odbAlm)
If (n_ret_code <> Focas1.EW_OK) Then
sz_Err_Msg = "Error in F_get_cnc_alarms3 " & " - " & Fanuc_error_codes(n_ret_code)
'szErrMsg = msg(120) & " " & Str(n_ret_code)
'MsgBox(szErrMsg)
Return (BAD_RETURN_SH)
End If
AlarmMessageCount = n_AlmMsgCount
AlarmMessage(0) = odbAlm.msg1.alm_msg
AlarmMessage(1) = odbAlm.msg2.alm_msg
AlarmMessage(2) = odbAlm.msg3.alm_msg
AlarmMessage(3) = odbAlm.msg4.alm_msg
AlarmMessage(4) = odbAlm.msg5.alm_msg
AlarmMessage(5) = odbAlm.msg6.alm_msg
AlarmMessage(6) = odbAlm.msg7.alm_msg
AlarmMessage(7) = odbAlm.msg8.alm_msg
AlarmMessage(8) = odbAlm.msg9.alm_msg
AlarmMessage(9) = odbAlm.msg10.alm_msg
AlarmNumber(0) = odbAlm.msg1.alm_no
AlarmNumber(1) = odbAlm.msg2.alm_no
AlarmNumber(2) = odbAlm.msg3.alm_no
AlarmNumber(3) = odbAlm.msg4.alm_no
AlarmNumber(4) = odbAlm.msg5.alm_no
AlarmNumber(5) = odbAlm.msg6.alm_no
AlarmNumber(6) = odbAlm.msg7.alm_no
AlarmNumber(7) = odbAlm.msg8.alm_no
AlarmNumber(8) = odbAlm.msg9.alm_no
AlarmNumber(9) = odbAlm.msg10.alm_no
Else
End If ' simulazione
Return (n_AlmMsgCount)
End Function
Public Function F_get_operator_messages() As Short
Dim n_MsgCount As Short = 0
Dim opMsg As Focas1.OPMSG3 = Nothing ' defaults to 5 messages in fwlib32.vb
sz_Err_Msg = ""
If Not bSimulation Then ' simulazione ?
Try
' n_MsgCount = 5 ' 16/18/21, 16i/18i/21i, 0i-A/B/C
' n_MsgCount = 17 ' 30i, 0i-D/F, PMi-A
n_MsgCount = 5 ' 30i, 0i-D/F, PMi-A NO COMMENT
n_ret_code = Focas1.cnc_rdopmsg3(h_Session, ALL_OP_MSG_TYPE, n_MsgCount, opMsg)
' Const MAX_OPERATOR_ALM_MSG As Short = 5 ' max number of messages
If (n_ret_code <> Focas1.EW_OK) Then
sz_Err_Msg = "Error in F_get_operator_messages " & " - " & Fanuc_error_codes(n_ret_code)
'szErrMsg = msg(120) & " " & Str(n_ret_code)
'MsgBox(szErrMsg)
Return (BAD_RETURN_SH)
End If
'OperatorMessageCount = n_MsgCount
OperatorMessageCount = 0
OperatorMessage(0) = opMsg.msg1.data
If Not String.IsNullOrEmpty(OperatorMessage(0)) Then
OperatorMessageCount += 1
End If
OperatorMsgNumber(0) = opMsg.msg1.datano
OperatorMessage(1) = opMsg.msg2.data
If Not String.IsNullOrEmpty(OperatorMessage(1)) Then
OperatorMessageCount += 1
End If
OperatorMsgNumber(1) = opMsg.msg2.datano
OperatorMessage(2) = opMsg.msg3.data
If Not String.IsNullOrEmpty(OperatorMessage(2)) Then
OperatorMessageCount += 1
End If
OperatorMsgNumber(2) = opMsg.msg3.datano
OperatorMessage(3) = opMsg.msg4.data
If Not String.IsNullOrEmpty(OperatorMessage(3)) Then
OperatorMessageCount += 1
End If
OperatorMsgNumber(3) = opMsg.msg4.datano
OperatorMessage(4) = opMsg.msg5.data
If Not String.IsNullOrEmpty(OperatorMessage(4)) Then
OperatorMessageCount += 1
End If
OperatorMsgNumber(4) = opMsg.msg5.datano
n_MsgCount = OperatorMessageCount
Catch ex As Exception
sz_Err_Msg = "Error in F_get_operator_messages " & " - " & ex.Message
Return (BAD_RETURN_SH)
End Try
Else
End If ' simulazione
Return (n_MsgCount)
End Function
Public Function F_get_PLC_messages() As Short
Dim n_MsgCount As Short = 10
Dim odbpmcalm As Focas1.ODBPMCALM = Nothing ' defaults to 5 messages in fwlib32.vb
Dim n_start As Short = 1
Dim n_more_msg As Short, n_total_msg As Short = 0
Dim b_end As Boolean = False
lst_plc_messages.Clear()
sz_Err_Msg = ""
If Not bSimulation Then ' simulazione ?
Try
While Not b_end
n_ret_code = Focas1.pmc_rdalmmsg(h_Session, n_start, n_MsgCount, n_more_msg, odbpmcalm)
If (n_ret_code <> Focas1.EW_OK) Then
sz_Err_Msg = "Error in F_get_PLC_messages " & " - " & Fanuc_error_codes(n_ret_code)
Return (BAD_RETURN_SH)
End If
If n_MsgCount > 0 Then lst_plc_messages.Add(odbpmcalm.msg1.almmsg)
If n_MsgCount > 1 Then lst_plc_messages.Add(odbpmcalm.msg2.almmsg)
If n_MsgCount > 2 Then lst_plc_messages.Add(odbpmcalm.msg3.almmsg)
If n_MsgCount > 3 Then lst_plc_messages.Add(odbpmcalm.msg4.almmsg)
If n_MsgCount > 4 Then lst_plc_messages.Add(odbpmcalm.msg5.almmsg)
If n_MsgCount > 5 Then lst_plc_messages.Add(odbpmcalm.msg6.almmsg)
If n_MsgCount > 6 Then lst_plc_messages.Add(odbpmcalm.msg7.almmsg)
If n_MsgCount > 7 Then lst_plc_messages.Add(odbpmcalm.msg8.almmsg)
If n_MsgCount > 8 Then lst_plc_messages.Add(odbpmcalm.msg9.almmsg)
If n_MsgCount > 9 Then lst_plc_messages.Add(odbpmcalm.msg10.almmsg)
If n_more_msg < 1 Then b_end = True
n_total_msg = n_total_msg + n_MsgCount
End While
Catch ex As Exception
sz_Err_Msg = "Error in F_get_PLC_messages " & " - " & ex.Message
Return (BAD_RETURN_SH)
End Try
End If ' simulazione
Return (n_total_msg)
End Function
#End Region
#Region " Download/upload"
Private Const MAX_PNC_PATH_LEN As Short = 212
Private Const PATH_FOREGROUND As Short = 1
Private Const PATH_BACKGROUND As Short = 2
Private sz_Nc_cur_path As String = ""
Function Send_file_to_nc(ByVal szFileToSend As String, ByVal szDirCn As String, ByVal szNameOnNc As String) As Boolean
Dim szNamePrgCopy As String
Dim szProgramDel As String
Dim b_ret As Boolean = False
If File.Exists(szFileToSend) Then
szNamePrgCopy = InserisciNome(szFileToSend, szNameOnNc) ' correct name inserting for Fanuc 30 series Dim szProgramDel As String = szDirCn & "\" & szNameOnNc
If szDirCn <> "" Then
If szDirCn.EndsWith( "/") Then
szProgramDel = szDirCn & szNameOnNc
Else
szProgramDel = szDirCn & "/" & szNameOnNc
End If
Else
szProgramDel = szNameOnNc
End If
b_ret = F_Delete_Prg(szProgramDel)
If (b_ret) Then b_ret = F_Send_Prg(szNamePrgCopy, szDirCn)
End If
Return b_ret
End Function
' ---------------------------------------------------------
' Invia un programma al CN
' ---------------------------------------------------------
Public Function F_Send_Prg(ByVal szFileName As String, ByVal szDirWork As String) As Boolean
Dim nFile As Integer
Dim szMaxiStringa As String
Dim dLenMaxiStringa As Long
Dim szLine As String
Dim bError As Boolean, b_ret As Boolean
Dim l_prg_file_size As Long, l_num_bytes_sent As Long
b_ret = True
bError = False
sz_Err_Msg = ""
szDirWork = szDirWork.Replace("\", "/")
If Not szDirWork.Contains("/") Then szDirWork = sz_Nc_cur_path
If Not bSimulation Then ' se non simulazione
If (System.IO.File.Exists(szFileName)) Then ' verifico che il file esista
n_ret_code = Focas1.cnc_dwnstart4(h_Session, 0, szDirWork) ' start download
If (n_ret_code = Focas1.EW_OK) Then ' cnc_dwnstart4 tutto Ok ?
' leggo tutto il file in una maxi stringa
nFile = FreeFile()
FileOpen(nFile, szFileName, OpenMode.Input)
szMaxiStringa = ""
While Not EOF(nFile)
szLine = LineInput(nFile) ' leggo linea
szMaxiStringa = szMaxiStringa & vbCrLf & szLine ' la scrivo nella maxi stringa
End While
szMaxiStringa = szMaxiStringa & vbCrLf
dLenMaxiStringa = Len(szMaxiStringa) ' lunghezza stringa che contiene l' intero programma....
l_prg_file_size = dLenMaxiStringa
l_num_bytes_sent = 0
FileClose(nFile) ' chiudo file
' ciclo scrittura (manda blocchi di n caratteri)
While ((dLenMaxiStringa > 0) And (bError = False))
' mando (dLenMaxiStringa bytes e mi dice quanti ne ho mandati)
n_ret_code = Focas1.cnc_download4(h_Session, dLenMaxiStringa, szMaxiStringa)
If (n_ret_code = Focas1.EW_BUFFER) Then ' EW_BUFFER ?
n_ret_code = Focas1.EW_OK ' riprovo al prossimo giro
ElseIf (n_ret_code = Focas1.EW_OK) Then ' cnc_download4 ok ?
szMaxiStringa = Mid(szMaxiStringa, dLenMaxiStringa + 1) ' aggiusto stringa (tolgo caratteri mandati)
l_num_bytes_sent = l_num_bytes_sent + dLenMaxiStringa
dLenMaxiStringa = Len(szMaxiStringa) ' ricalcolo lunghezza
Else ' errore .....
' MsgBox(msg(128) & " - " & Fanuc_error_codes(n_ret_code), MsgBoxStyle.Critical, "F_send_prg") ' "Problem ending trasmission"
sz_Err_Msg = "Error in F_send_prg - cnc_download4 - " & Fanuc_error_codes(n_ret_code)
Call Focas1.cnc_dwnend4(h_Session)
b_ret = False
bError = True
End If ' cnc_download4 ok
'
End While
n_ret_code = Focas1.cnc_dwnend4(h_Session) ' Chiudo tx
Else '
' msgBox(msg(127) & " - " & Fanuc_error_codes(n_ret_code), MsgBoxStyle.Critical, "F_send_prg") ' MsgBox("Problem starting trasmission")
sz_Err_Msg = "Error in F_send_prg - cnc_dwnstart4 - " & Fanuc_error_codes(n_ret_code)
b_ret = False
End If ' cnc_dwnstart4 tutto Ok
Else ' File Da spedire non trovato
sz_Err_Msg = "Error in F_send_prg - the file : " & szFileName & "do not exist"
' MsgBox(msg(108) & " : " & szFileName & " " & msg(109))
b_ret = False
End If
Else
End If ' simulation
Return b_ret
End Function
'
' Ricevi programma da CN
'
Public Function F_Receive_Prg(ByVal szFileName As String, ByVal sz_NC_programname As String) As Boolean
' sz_NC_programname can be:
' File name only : "O1234"
' Folder name : "//CNC_MEM/USER/PATH1/"
' Path + file name : "//CNC_MEM/USER/PATH1/O1234"
Dim b_exit As Boolean = False
Dim sz_temp As String = ""
Dim sz_Maxi_String As String = ""
Dim n_read_length As Short
If Not bSimulation Then ' se non simulazione
If Not sz_NC_programname.Contains("/") Then sz_NC_programname = sz_Nc_cur_path & sz_NC_programname
' start uploading NC program 4
n_ret_code = Focas1.cnc_upstart4(h_Session, 0, sz_NC_programname)
If (n_ret_code <> Focas1.EW_OK) Then
sz_Err_Msg = "Error in cnc_upstart4 - file : " & sz_NC_programname & " - " & Fanuc_error_codes(n_ret_code)
Return False
End If
Try
' ciclo lettura (manda blocchi di n caratteri)
While (b_exit = False)
System.Threading.Thread.Sleep(50)
n_read_length = 1024 ' chiedo n_read_length bytes e mi dice quanti ne ho mandati
n_ret_code = Focas1.cnc_upload4(h_Session, n_read_length, sz_temp)
If (n_ret_code = Focas1.EW_BUFFER) Then ' EW_BUFFER ?
n_ret_code = Focas1.EW_OK ' riprovo al prossimo giro
ElseIf (n_ret_code = Focas1.EW_OK) Then ' cnc_upload4 ok ?
If sz_temp.Contains(Chr(0)) Then
sz_temp = sz_temp.Replace(Chr(0), "")
End If
If sz_temp.StartsWith("%") Then
sz_temp = sz_temp.Replace("%", "")
End If
If sz_temp.EndsWith("%") Then
sz_temp = sz_temp.Replace("%", "")
b_exit = True
End If
sz_Maxi_String = sz_Maxi_String & sz_temp
Else ' errore .....
' MsgBox(msg(128) & " - " & Fanuc_error_codes(n_ret_code), MsgBoxStyle.Critical, "F_send_prg") ' "Problem ending trasmission"
sz_Err_Msg = "Error in F_Receive_Prg - cnc_upload4 - " & Fanuc_error_codes(n_ret_code)
Call Focas1.cnc_upend4(h_Session)
Return False
End If ' cnc_upload4 ok
'
End While
Catch ex As Exception
MsgBox("Error 791 in F_Receive_Prg" & ex.Message)
End Try
n_ret_code = Focas1.cnc_dwnend4(h_Session) ' Chiudo tx
If (n_ret_code = Focas1.EW_OK) Then '
Dim Writer As StreamWriter
Try
Writer = New StreamWriter(szFileName, False)
Writer.WriteLine(sz_Maxi_String)
Writer.Flush()
Writer.Close()
Catch ex As Exception
MsgBox("Error 792 in F_Receive_Prg" & ex.Message)
Return False
End Try
Else
sz_Err_Msg = "Error 793 in cnc_dwnend4 - file : " & sz_NC_programname & " - " & Fanuc_error_codes(n_ret_code)
Return False
End If
End If ' non simulazione
Return True
End Function
' ---------------------------------------------------------
' Cancella programma su CN
' ---------------------------------------------------------
Function F_Delete_Prg(ByVal szNomePrg As String) As Boolean
Dim b_ret As Boolean
' barre invertite
szNomePrg = szNomePrg.Replace("\", "/")
If Not szNomePrg.Contains("/") Then szNomePrg = sz_Nc_cur_path & szNomePrg
b_ret = True
sz_Err_Msg = ""
' se non simulazione
If Not bSimulation Then
n_ret_code = Focas1.cnc_pdf_del(h_Session, szNomePrg)
If (n_ret_code = Focas1.EW_OK) Then Return True
If fanuc_error_file_not_found(n_ret_code) Then Return True ' if file not found error... no problem
' casi di errore
If (n_ret_code = Focas1.EW_PROT) Then
sz_Err_Msg = "Error in F_Delete_Prg - file protected : " & szNomePrg
' MsgBox(msg(110) & " : " & szNomePrg)
b_ret = False
ElseIf (n_ret_code = Focas1.EW_BUSY) Then
sz_Err_Msg = "Error in F_Delete_Prg - file busy : " & szNomePrg
' MsgBox(msg(111) & " : " & szNomePrg)
b_ret = False
ElseIf (n_ret_code = Focas1.EW_REJECT) Then
sz_Err_Msg = "Error in F_Delete_Prg - file reject : " & szNomePrg
' MsgBox(msg(112) & " : " & szNomePrg)
b_ret = False
Else
sz_Err_Msg = "Error in F_Delete_Prg - file : " & szNomePrg & " - " & Fanuc_error_codes(n_ret_code)
b_ret = False
End If
End If ' simulation
Return b_ret
End Function
' ---------------------------------------------------------
' Ritorna path corrente su CN
' ---------------------------------------------------------
Function F_Get_current_NC_dir(ByRef sz_NC_current_path As String) As Integer
Dim ch_temp As Char()
sz_Err_Msg = ""
' se non simulazione
If Not bSimulation Then
ReDim ch_temp(MAX_PNC_PATH_LEN)
n_ret_code = Focas1.cnc_rdpdf_curdir(h_Session, PATH_FOREGROUND, ch_temp)
If (n_ret_code = Focas1.EW_OK) Then
sz_NC_current_path = Get_null_terminated_string(ch_temp)
If (sz_NC_current_path.Length > 0) And (Not sz_NC_current_path.EndsWith("/")) Then
sz_NC_current_path = sz_NC_current_path & "/" ' convenzione Fanuc per path nname : deve terminare con /
End If
sz_Nc_cur_path = sz_NC_current_path
Return n_ret_code
Else
sz_Err_Msg = "Error in F_Get_current_NC_dir - file : " & Fanuc_error_codes(n_ret_code)
Return n_ret_code
End If
End If ' simulation
Return Focas1.EW_OK
End Function
'------------------------------------
' Cambia nome interno del CN in <Nomesend>
'------------------------------------
Private Function InserisciNome(ByVal szFileName As String, ByVal NomeSend As String) As String
Dim szLine As String
Dim nFiler As Integer
Dim nFilew As Integer
Dim nLen As Integer
Dim szFileProgramma As String
nLen = InStrRev(szFileName, "\")
szFileProgramma = Mid(szFileName, 1, nLen) ' path ( fino a "\" inclusa )
szFileProgramma = szFileProgramma & "Temp.txt"
' apertura file in input
nFiler = FreeFile()
FileOpen(nFiler, szFileName, OpenMode.Input)
' apertura file in output
nFilew = FreeFile()
FileOpen(nFilew, szFileProgramma, OpenMode.Output)
' scrittura nome programma preceduta da linea vuota
If NomeSend.StartsWith( "O") Then
PrintLine(nFilew, vbLf & NomeSend)
Else
PrintLine(nFilew, vbLf & "<" & NomeSend & ">")
End If
' Trascrivo file tranne prima linea
While Not EOF(nFiler)
' leggo linea
szLine = LineInput(nFiler)
' leva linee con %
If InStr(szLine, "%") > 0 Then
' Nothing
' leva linee con < (se non preceduto da M98)
ElseIf InStr(szLine, "<") > 0 AndAlso InStr(szLine, "M98") = 0 Then
' Nothing
' leva le righe Oxxxxx
ElseIf Mid(szLine, 1, 1) = "O" Then
' Nothing
Else
PrintLine(nFilew, szLine)
End If
End While
PrintLine(nFilew, "%") ' !!
' chiusura files
FileClose(nFiler)
FileClose(nFilew)
Return szFileProgramma
End Function
Private Function Get_null_terminated_string(cha As Char()) As String
Dim sz_ret As String = ""
For i As Short = 0 To MAX_PNC_PATH_LEN - 1
If cha(i) <> Chr(0) Then
sz_ret = sz_ret & cha(i)
Else
Exit For
End If
Next
Return sz_ret
End Function
#End Region
#Region " Positions"
' ---------------------------------------------------------
' NC read absolute axis position
' ---------------------------------------------------------
Function F_read_position_ABS() As Boolean
Dim odbaxis As Focas1.ODBAXIS = Nothing ' defaults to 8 in fwlib32.vb
Dim n_size As Short
sz_Err_Msg = ""
n_size = 4 + 4 * 32
n_ret_code = Focas1.cnc_absolute2(h_Session, ALL_AXES, n_size, odbaxis)
If n_ret_code = Focas1.EW_OK Then
For n As Short = 0 To Focas1.MAX_AXIS - 1
l_pos_values(n) = odbaxis.data(n)
Next
Return True
Else
sz_Err_Msg = "Error in F_read_position_ABS : " & Fanuc_error_codes(n_ret_code)
Return False
End If
End Function
' ---------------------------------------------------------
' NC read machine axis position
' ---------------------------------------------------------
Function F_read_position_MACH() As Boolean
Dim odbaxis As Focas1.ODBAXIS = Nothing ' defaults to 8 in fwlib32.vb
Dim n_size As Short
sz_Err_Msg = ""
n_size = 4 + 4 * 32
n_ret_code = Focas1.cnc_machine(h_Session, ALL_AXES, n_size, odbaxis)
If n_ret_code = Focas1.EW_OK Then
For n As Short = 0 To Focas1.MAX_AXIS - 1
l_pos_values(n) = odbaxis.data(n)
Next
Return True
Else
sz_Err_Msg = "Error in F_read_position_MACH : " & Fanuc_error_codes(n_ret_code)
Return False
End If
End Function
' ---------------------------------------------------------
' NC read delta axis position
' ---------------------------------------------------------
Function F_read_position_DELTA() As Boolean
Dim odbaxis As Focas1.ODBAXIS = Nothing ' defaults to 8 in fwlib32.vb
Dim n_size As Short
sz_Err_Msg = ""
n_size = 4 + 4 * 32
n_ret_code = Focas1.cnc_distance(h_Session, ALL_AXES, n_size, odbaxis)
If n_ret_code = Focas1.EW_OK Then
For n As Short = 0 To Focas1.MAX_AXIS - 1
l_delta_values(n) = odbaxis.data(n)
Next
Return True
Else
sz_Err_Msg = "Error in F_read_position_DELTA : " & Fanuc_error_codes(n_ret_code)
Return False
End If
End Function
#End Region
' ---------------------------------------------------------
' selezione programma su CN
' ---------------------------------------------------------
Function F_Select_Prg(ByVal szNomePrg As String) As Boolean
sz_Err_Msg = ""
If Not bSimulation Then
' barre invertite
szNomePrg = szNomePrg.Replace("\", "/")
'If Not szNomePrg.StartsWith("/") Then szNomePrg = "/" & szNomePrg
If Not szNomePrg.Contains("/") Then szNomePrg = sz_Nc_cur_path & szNomePrg
n_ret_code = Focas1.cnc_pdf_slctmain(h_Session, szNomePrg) ' select program file
If n_ret_code = Focas1.EW_OK Then
Return True
Else
sz_Err_Msg = "Error in F_Select_Prg : " & szNomePrg & Environment.NewLine & Fanuc_error_codes(n_ret_code)
Return False
End If
End If ' simulation
Return True
End Function
' ---------------------------------------------------------
' reset CN
' ---------------------------------------------------------
Function F_reset() As Boolean
sz_Err_Msg = ""
If Not bSimulation Then
'n_ret_code = Focas1.cnc_reset(h_Session)
n_ret_code = Focas1.cnc_reset2(h_Session)
If n_ret_code = Focas1.EW_OK Then
Return True
Else
sz_Err_Msg = "Error in F_reset : " & Fanuc_error_codes(n_ret_code)
Return False
End If
End If ' simulation
Return True
End Function
' ---------------------------------------------------------
' Cycle Start
' ---------------------------------------------------------
Function F_cycle_start() As Boolean
sz_Err_Msg = ""
If Not bSimulation Then
n_ret_code = Focas1.cnc_start(h_Session)
' n_ret_code = Focas1.cnc_reset2(h_Session)
If n_ret_code = Focas1.EW_OK Then
Return True
Else
sz_Err_Msg = "Error in F_cycle_start : " & Fanuc_error_codes(n_ret_code)
Return False
End If
End If ' simulation
Return True
End Function
' ---------------------------------------------------------
' NC status
' ---------------------------------------------------------
Function F_NC_status(ByRef n_status As Short) As Boolean
'
' returns
'
' 0 : MDI
1: ' 1 : MEMory
2: ' 2 : ***
3: ' 3 : EDIT
4: ' 4 : HaNDle
5: ' 5 : JOG
6: ' 6 : Teach in JOG
7: ' 7 : Teach in HaNDle
8: ' 8 : INC·feed
9: ' 9 : REFerence
10: '10 : ReMoTe
'
Dim odbstat As Focas1.ODBST
'
'Dim odbstat2 As Focas1.ODBST2
' !!!!!!!!!!!!!!!!!!!!!! n_ret_code = Focas1.cnc_statinfo2(h_Session, odbstat2)
sz_Err_Msg = ""
If Not bSimulation Then
n_ret_code = Focas1.cnc_statinfo(h_Session, odbstat)
If n_ret_code = Focas1.EW_OK Then
' n_status = odbstat2.aut
n_status = odbstat.aut
Return True
Else
sz_Err_Msg = "Error in F_NC_status : " & Fanuc_error_codes(n_ret_code)
Return False
End If
End If ' simulation
Return True
End Function
' ---------------------------------------------------------
' NC system info
' ---------------------------------------------------------
Function F_sys_info() As Boolean
Dim odbsys As Focas1.ODBSYS = Nothing
sz_Err_Msg = ""
If Not bSimulation Then
n_ret_code = Focas1.cnc_sysinfo(h_Session, odbsys)
If n_ret_code = Focas1.EW_OK Then
sz_NC_type = odbsys.cnc_type
Return True
Else
sz_Err_Msg = "Error in F_sys_info : " & Fanuc_error_codes(n_ret_code)
Return False
End If
End If ' simulation
Return True
End Function
' ---------------------------------------------------------
' MDI
' ---------------------------------------------------------
Function F_MDI_write_program(sz_MDI_command As String) As Boolean
Dim sz_MDI_program As String = ""
sz_Err_Msg = ""
If Not bSimulation Then
' Nicola: 10/05/2024
Dim sItems As String() = sz_MDI_command.Split(";")
Dim sNew_MDI_program As String = ""
For Each sItem As String In sItems
sNew_MDI_program &= sItem & vbLf
Next
sNew_MDI_program &= "%"
sz_MDI_program = sNew_MDI_program
' Nicola: 29/03/2023
If Not sz_MDI_program.StartsWith(vbLf) Then sz_MDI_program = vbLf & sz_MDI_program
If Not sz_MDI_program.EndsWith(";") Then sz_MDI_program &= ";"
If Not sz_MDI_program.EndsWith(vbLf) Then sz_MDI_program &= vbLf
If Not sz_MDI_program.EndsWith("%") Then sz_MDI_program &= "%"
n_ret_code = Focas1.cnc_wrmdiprog(h_Session, sz_MDI_program.Length, sz_MDI_program)
If n_ret_code = Focas1.EW_OK Then
Return True
Else
sz_Err_Msg = "Error in F_MDI_write_program : " & Fanuc_error_codes(n_ret_code)
Return False
End If
End If ' simulation
Return True
End Function
End Module