Files
Dario Sassi d962c43e0c OmagCUT :
- correzione scrittura variabili booleane su Fanuc
- modificata gestione Power per Fanuc (ora gestisce anche Short senza segno fino a 65535 quindi 65.535 Ampere).
2026-03-27 11:12:11 +01:00

295 lines
14 KiB
VB.net

Imports EgtUILib.EgtInterface
Module VarMdiCommand
Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow)
Public Sub ExecuteMDICommand(sLuaFileName As String)
' Verifica esistenza pagina DirectCut e ne recupero CN corrente
If IsNothing( m_MainWindow.m_DirectCutPageUC) Then Return
Dim CurrCN As CN_generico = m_MainWindow.m_DirectCutPageUC.m_CN
' Verifico esistenza nome script lua
If String.IsNullOrWhiteSpace(sLuaFileName) Then Return
' Eseguo script
Dim CmdString As String = String.Empty
Dim b2Start As Boolean = False
Dim bEActive As Boolean = False
Dim sENumber As String = String.Empty
Dim sEValue As String = String.Empty
Dim sEType As String = 0
Dim sENumber2 As String = String.Empty
Dim sEValue2 As String = String.Empty
Dim sEType2 As String = 0
If Not ExecDirectCmdLua(sLuaFileName, CmdString, b2Start, bEActive, sENumber, sEValue, sEType, sENumber2, sEValue2, sEType2) Then
Return
End If
' Se richiesta scrittura variabili
If bEActive Then
Select Case m_MainWindow.m_CNCommunication.m_nNCType
Case 1, 2 ' Num Axium e Flexium
' se Flexium e abilitata scrittura variabili PLC
If m_MainWindow.m_CNCommunication.m_nNCType = 2 And CurrCN.m_NewVariable Then
CurrCN.DPlcVariables_WriteVariables(sENumber, sEValue)
If Not String.IsNullOrWhiteSpace(sENumber2) AndAlso Not String.IsNullOrWhiteSpace(sEValue2) Then
CurrCN.DPlcVariables_WriteVariables(sENumber2, sEValue2)
End If
' altrimenti scrittura della variabile E
Else
CurrCN.DVariables_WriteVariables2(sENumber, sEValue)
End If
Return
Case 3 ' Siemens
' Scrivo prima variabile
Dim nEType As Integer = 0
StringToInt( sEType, nEType)
Select Case nEType
Case 1
Dim nEvalue As Integer = 0
StringToInt( sEvalue, nEvalue)
CurrCN.DVariables_WriteVariables3(sENumber, 1, nEValue, 0, 0, "")
EgtOutLog("ENumber=" & sENumber & " EType=1 " & " EValue=" & nEValue.ToString())
Case 2
Dim lEvalue As Long = 0
Long.TryParse(sEValue, lEvalue)
CurrCN.DVariables_WriteVariables3(sENumber, 2, 0, lEvalue, 0, "")
EgtOutLog("ENumber=" & sENumber & " EType=2 " & " EValue=" & lEvalue.ToString())
Case 3
Dim dEValue As Double = 0
StringToDouble(sEValue, dEValue)
CurrCN.DVariables_WriteVariables3(sENumber, 3, 0, 0, dEValue, "")
EgtOutLog("ENumber=" & sENumber & " EType=3 " & " EValue=" & dEValue.ToString())
Case 4
CurrCN.DVariables_WriteVariables3(sENumber, 4, 0, 0, 0, sEValue)
EgtOutLog("ENumber=" & sENumber & " EType=4 " & " EValue=" & sEValue)
Case Else
EgtOutLog("EType wrong : ENumber=" & sENumber & " EType=" & sEType & " EValue= " & sEValue)
End Select
If Not String.IsNullOrWhiteSpace(sEType2) AndAlso sEType2 <> "0" Then
' Pausa
System.Threading.Thread.Sleep(100)
' Scrivo seconda variabile
Dim nEType2 As Integer = 0
StringToInt( sEType2, nEType2)
Select Case nEType2
Case 1
Dim nEvalue2 As Integer = 0
StringToInt( sEvalue2, nEvalue2)
CurrCN.DVariables_WriteVariables3(sENumber2, 1, nEValue2, 0, 0, "")
EgtOutLog("ENumber2=" & sENumber2 & " EType2=1" & " EValue2=" & nEValue2.ToString())
Case 2
Dim lEvalue2 As Long = 0
Long.TryParse(sEValue2, lEvalue2)
CurrCN.DVariables_WriteVariables3(sENumber2, 2, 0, lEValue2, 0, "")
EgtOutLog("ENumber2=" & sENumber2 & " EType2=2" & " EValue2=" & lEValue2.ToString())
Case 3
Dim dEValue2 As Double = 0
StringToDouble(sEValue2, dEValue2)
CurrCN.DVariables_WriteVariables3(sENumber2, 3, 0, 0, dEValue2, "")
EgtOutLog("ENumber2=" & sENumber2 & " EType2=3" & " EValue2=" & dEValue2.ToString())
Case 4
CurrCN.DVariables_WriteVariables3(sENumber2, 4, 0, 0, 0, sEValue2)
EgtOutLog("ENumber2=" & sENumber2 & " EType2=4" & " EValue2=" & sEValue2)
Case Else
EgtOutLog("EType2 wrong : ENumber2=" & sENumber2 & " EType2=" & sEType2 & " EValue2=" & sEValue2)
End Select
End If
Return
Case 4 ' Fanuc
' eventuale scrittura di linea di comando MDI
If Not String.IsNullOrWhiteSpace(CmdString) Then
' attivo mpdalità MDI
CurrCN.DGeneralFunctions_WriteCncMode(2)
System.Threading.Thread.Sleep(100)
' salvo la stringa di comando ricevuta dal file lua
CurrCN.sz_ManualDataInput = CmdString
' eseguo la funzione che ha il compito di scrivere il comando MDI
CurrCN.MDI_command()
End If
' attivo modalità Manuale
CurrCN.DGeneralFunctions_WriteCncMode(7)
System.Threading.Thread.Sleep(100)
' eventuale caricamento prima variabile
If Not String.IsNullOrEmpty(sENumber) Then
If String.IsNullOrWhiteSpace(sEValue) Then
' EActive: impulsivo "D#####"
CurrCN.NC_pulse_bit(sENumber)
EgtOutLog("Fanuc : DNumber=" & sENumber)
Else
' EActive + EValue: scrittura comando invariabile Short oppure Bit
If sENumber.Contains(".") Then
' D#####.#
Dim bEValue As Boolean = ( sEValue.Trim <> "0")
CurrCN.NC_write_var_bit(sENumber, bEValue)
Else
' D#####
CurrCN.NC_write_var_short(sENumber, CShort(sEValue))
End If
EgtOutLog("Fanuc : DNumber=" & sENumber & " DValue=" & sEValue)
End If
Else
EgtOutLog("Fanuc : DNumber=NullOrEmpty")
End If
' eventale caricamento seconda variabile
If Not String.IsNullOrEmpty(sENumber2) Then
If String.IsNullOrWhiteSpace(sEValue2) Then
' EActive: impulsivo "D#####"
CurrCN.NC_pulse_bit(sENumber2)
EgtOutLog("Fanuc : DNumber2=" & sENumber2)
Else
' EActive + EValue: scrittura comando invariabile Short oppure Bit
If sENumber2.Contains(".") Then
' D#####.#
Dim bEValue2 As Boolean = ( sEValue2.Trim <> "0")
CurrCN.NC_write_var_bit(sENumber2, bEValue2)
Else
' D#####
CurrCN.NC_write_var_short(sENumber2, CShort(sEValue2))
End If
EgtOutLog("Fanuc : DNumber2=" & sENumber2 & " DValue2=" & sEValue2)
End If
Else
EgtOutLog("Fanuc : DNumber2=NullOrEmpty")
End If
Return
Case Else ' Demo
EgtOutLog("Demo : ENumber=" & sENumber & " EType=" & sEType & " EValue=" & sEValue)
EgtOutLog("Demo : ENumber2=" & sENumber2 & " EType2=" & sEType2 & " EValue2=" & sEValue2)
Return
End Select
End If
' Esecuzione comando MDI
Dim nResult As Short
' assegno la modalità di funzionamento
Select Case m_MainWindow.m_CNCommunication.m_nNCType
Case 1, 2, 4
nResult = CurrCN.DGeneralFunctions_WriteCncMode(2) ' Modalità MDI per controlli num
Case 3
'Per Siemens non devo fare nulla
End Select
' salvo la stringa di comando ricevuta dal file lua
CurrCN.sz_ManualDataInput = CmdString
' esguo la funzione che ha il compito di scrivere il comando MDI
CurrCN.MDI_command()
' avvio l'esecuzione del comando
Select Case m_MainWindow.m_CNCommunication.m_nNCType
Case 1, 2
System.Threading.Thread.Sleep(500)
CurrCN.DGeneralFunctions_CycleStart()
Case 3, 4
'Per Siemens e Fanuc non devo fare nulla
End Select
' se richiesto ripeto l'operazione
If b2Start Then
EgtOutLog("Avvio secondo cliclo start")
System.Threading.Thread.Sleep(800)
CurrCN.DGeneralFunctions_CycleStart()
End If
System.Threading.Thread.Sleep(300)
' ripristino la modalità Manuale
nResult = CurrCN.DGeneralFunctions_WriteCncMode(7)
End Sub
' Esecuzione dello script lua per impostazione dati del comando diretto
Private Function ExecDirectCmdLua(sLuaFileName As String,
ByRef CmdString As String, ByRef b2Start As Boolean, ByRef bEActive As Boolean,
ByRef sENumber As String, ByRef sEValue As String, ByRef sEType As String,
ByRef sENumber2 As String, ByRef sEValue2 As String, ByRef sEType2 As String) As Boolean
' Esecuzione script
Dim sLuaPath As String = m_MainWindow.m_CurrentMachine.sMachDir & "\DirectCmd\" & sLuaFileName
Dim bOk As Boolean = EgtLuaExecFile(sLuaPath)
EgtOutLog("DirectCmd Script " & sLuaPath & If(bOk, " completed", " stopped with errors"))
If Not bOk Then Return False
' Assegnazione valori a variabili lua
Dim ManualAxesMove As ManualAxesMoveUC = m_MainWindow.m_DirectCutPageUC.m_ManualAxesMove
Dim dFeed As Double = 0
If Not String.IsNullOrWhiteSpace(ManualAxesMove.FeedTxBx.Text) Then
StringToLen(ManualAxesMove.FeedTxBx.Text, dFeed)
Else
EgtTdbSetCurrTool(m_MainWindow.m_CurrentProjectPageUC.ToolTxBx.Text)
EgtTdbGetCurrToolParam(MCH_TP.FEED, dFeed)
End If
EgtLuaSetGlobNumVar("CMD.F", dFeed)
Dim dSpeed As Double = 0
If Not String.IsNullOrWhiteSpace(ManualAxesMove.SpeedTxBx.Text) Then
StringToDouble(ManualAxesMove.SpeedTxBx.Text, dSpeed)
Else
EgtTdbSetCurrTool(m_MainWindow.m_CurrentProjectPageUC.ToolTxBx.Text)
EgtTdbGetCurrToolParam(MCH_TP.SPEED, dSpeed)
End If
EgtLuaSetGlobNumVar("CMD.S", dSpeed)
EgtTdbSetCurrTool(m_MainWindow.m_CurrentProjectPageUC.ToolTxBx.Text)
Dim sToolPos As String = String.Empty
If EgtTdbGetCurrToolParam(MCH_TP.TCPOS, sToolPos) Then
EgtLuaGetGlobStringVar("CMD.TCPOS", sToolPos)
End If
Dim dToolDiam As Double = 0
If EgtTdbGetCurrToolParam(MCH_TP.DIAM, dToolDiam) Then
EgtLuaSetGlobNumVar("CMD.DIAM", dToolDiam * 1000)
End If
Dim dL1, dL2, dL3, dR1, dR2 As Double
m_MainWindow.m_CNCommunication.GetAxesPositions(dL1, dL2, dL3, dR1, dR2)
EgtLuaSetGlobNumVar("CMD.L1", dL1)
EgtLuaSetGlobNumVar("CMD.L2", dL2)
EgtLuaSetGlobNumVar("CMD.L3", dL3)
EgtLuaSetGlobNumVar("CMD.R1", dR1)
EgtLuaSetGlobNumVar("CMD.R2", dR2)
EgtLuaSetGlobBoolVar("CMD.INCHES", m_MainWindow.m_CNCommunication.GetMachineInInches())
Dim sCurrTable As String = String.Empty
Dim nCurrTable As Integer = 1
EgtGetTableName(sCurrTable)
If sCurrTable <> "MainTab" Then nCurrTable = 2
EgtLuaSetGlobIntVar("CMD.TABLE", nCurrTable)
' Esecuzione funzione
bOk = EgtLuaCallFunction("CmdString")
EgtOutLog(" CmdString function" & If(bOk, " completed", " stopped with errors"))
If Not bOk Then Return False
' Leggo variabili da file Lua
CmdString = String.Empty
EgtLuaGetGlobStringVar("CMD.CMDSTRING", CmdString)
b2Start = False
EgtLuaGetGlobBoolVar("CMD.DOUBLESTART", b2Start)
bEActive = False
EgtLuaGetGlobBoolVar("CMD.EACTIVE", bEActive)
sENumber = String.Empty
EgtLuaGetGlobStringVar("CMD.ENUMBER", sENumber)
sEValue = String.Empty
EgtLuaGetGlobStringVar("CMD.EVALUE", sEValue)
sEType = String.Empty
EgtLuaGetGlobStringVar("CMD.ETYPE", sEType)
sENumber2 = String.Empty
EgtLuaGetGlobStringVar("CMD.ENUMBER2", sENumber2)
sEValue2 = String.Empty
EgtLuaGetGlobStringVar("CMD.EVALUE2", sEValue2)
sEType2 = String.Empty
EgtLuaGetGlobStringVar("CMD.ETYPE2", sEType2)
' Reset variabili lua
EgtLuaResetGlobVar("CmdString")
EgtLuaResetGlobVar("CMD")
' Log del comando
EgtOutLog(" CmdString=" & If(Not String.IsNullOrEmpty(CmdString), CmdString, "") &
" DOUBLESTART=" & b2Start.ToString() &
" EActive=" & bEActive.ToString() &
" ENumber=" & If(Not String.IsNullOrEmpty(sENumber), sENumber, "") &
" EValue=" & If(Not String.IsNullOrEmpty(sEValue), sEValue, "") &
" EType=" & If(Not String.IsNullOrEmpty(sEType), sEType, "") &
" ENumber2=" & If(Not String.IsNullOrEmpty(sENumber2), sENumber2, "") &
" EValue2=" & If(Not String.IsNullOrEmpty(sEValue2), sEValue2, "") &
" EType2=" & If(Not String.IsNullOrEmpty(sEType2), sEType2, ""))
Return True
End Function
End Module