97836125a7
- 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.
1720 lines
53 KiB
VB.net
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 |