Files
egtbeamwall/EgtBEAMWALL.Supervisor/Comms/NUMAxiumPcToolkitComm.vb
T
2025-03-27 11:31:57 +01:00

1003 lines
45 KiB
VB.net

Imports System.Runtime.InteropServices
Imports System.Threading
Imports EgtBEAMWALL.Core
Imports EgtBEAMWALL.Core.ConstMachComm
Imports EgtUILib
Imports EgtWPFLib5
Public Class NUMAxiumPcToolkitComm
Enum CNMode As Integer
AUTO = 0
SINGLE_ = 1
MDI = 2
MANUAL = 7
End Enum
Enum OPOMTYPE As Integer
OP = &H11
OM = &H12
End Enum
Const MODE = 180, ACTIVE_PROG = 181
Const DNC_MODE_FIRST = 0, DNC_MODE_CONTINUE = 1, DNC_MODE_ABORT = 2, DNC_MODE_OPEN = 3, DNC_MODE_CLOSE = 4
Const DNC_IN_PROGRES = &HC8, DNC_OPEN = &H3A00, DNC_WRITE = &H3B00, DNC_CLOSE = &H3C00, FILE_NOT_EXIST = &HFFFE
Const SYN = 0 ' /* synchrone */
Const ASS = 1 ' /* assynchrone send request */
Const ASR = 2 ' /* assynchrone read response */
Private Enum eVarious2
MODE = 180
ACTIVE_PROG = 181
End Enum
Private Enum eVarious4
CTRL_AXES = 143
SPINDLE_SPEED = 144
SPINDLE_POS = 145
H_VAR = 147
MOS_OK = 149
E80000 = 150
E81000 = 151
E82000 = 152
E30000 = 30 ' aggiunto da noi, non presente nella documentazione Num e gestito a parte rispetto agli altri
End Enum
Const R1 = &HA401, R2 = &HA402, RL = &HA442
Const VL = &HA042
Public Structure My_data_struct
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=256)>
Public data As Byte()
End Structure
<StructLayout(LayoutKind.Explicit)>
Public Structure tDNC20_ObjectList
<FieldOffset(0)> Public ElemNum As UInt16
<FieldOffset(2)> Public First As UInt16
<FieldOffset(4)> Public Quantity As UInt16
End Structure
<System.Runtime.InteropServices.DllImport("LIB_UNIT2.DLL")>
Private Shared Function SetPLCTool(ByVal conf As String) As Int16
End Function
<System.Runtime.InteropServices.DllImport("LIB_UNIT2.DLL")>
Private Shared Function Get_Port(ByRef Port As Int16) As Int16
End Function
<System.Runtime.InteropServices.DllImport("LIB_UNIT2.DLL")>
Private Shared Function Close_Unite() As Int16
End Function
<System.Runtime.InteropServices.DllImport("LIB_UNIT2.DLL")>
Private Shared Function Free_Port(ByVal Port As Int16) As Int16
End Function
<System.Runtime.InteropServices.DllImport("dnc2.dll")>
Private Shared Function StartNC(ByVal Port As Int16) As Int16
End Function
<System.Runtime.InteropServices.DllImport("dnc2.dll")>
Private Shared Function StopNC(ByVal Port As Int16) As Int16
End Function
<System.Runtime.InteropServices.DllImport("dnc2.dll")>
Private Shared Function InitNC(ByVal Port As Int16) As Int16
End Function
<System.Runtime.InteropServices.DllImport("dnc2.dll")>
Private Shared Function ReadObjectVarious2(ByVal Port As Int16, ByVal qui As UInt16, ByRef pData As UInt16, ByVal Mode As UInt16) As Int16
End Function
<System.Runtime.InteropServices.DllImport("dnc2.dll")>
Private Shared Function WriteObjectVarious2(ByVal Port As Int16, ByVal qui As UInt16, ByRef pData As Int32) As Int16
End Function
<System.Runtime.InteropServices.DllImport("dnc2.dll")>
Private Shared Function DownLoadFileAsyn(ByVal Port As Int16, ByVal Prog As Int32, ByVal Filename As String, Mode As Int16, ByRef pIndex As Short) As Int16
End Function
<System.Runtime.InteropServices.DllImport("dnc2.dll")>
Private Shared Function DncDeleteFile(ByVal Port As Int16, ByVal Prog As Int32) As Int16
End Function
<System.Runtime.InteropServices.DllImport("dnc20_2.dll")>
Private Shared Function DNC20_DialWithModes_2(ByVal Port As Int16, ByVal pstring As String, ByVal Mode As UInt16) As Int16
End Function
<System.Runtime.InteropServices.DllImport("dnc2.dll")>
Private Shared Function ReadLadderVar(ByVal Port As Int16, ByVal qui As UInt16, ByVal First As UInt16, ByVal Quantity As UInt16, ByRef pData As My_data_struct, ByVal Mode As UInt16) As Int16
End Function
<System.Runtime.InteropServices.DllImport("dnc2.dll")>
Private Shared Function WriteLadderVar(ByVal Port As Int16, ByVal qui As UInt16, ByVal First As UInt16, ByVal Quantity As UInt16, ByRef pData As Integer) As Int16
End Function
<System.Runtime.InteropServices.DllImport("dnc2.dll")>
Private Shared Function ReadObjectVarious4(ByVal Port As Int16, ByVal qui As UInt16, ByVal First As UInt16, ByVal Quantity As UInt16, ByRef pData As My_data_struct, ByVal Mode As UInt16) As Int16
End Function
<System.Runtime.InteropServices.DllImport("dnc2.dll")>
Private Shared Function WriteObjectVarious4(ByVal Port As Int16, ByVal qui As UInt16, ByVal First As UInt16, ByVal Quantity As UInt16, ByRef pData As Integer) As Int16
End Function
<System.Runtime.InteropServices.DllImport("dnc20_2.dll")>
Private Shared Function DNC20_Position_OPOM(ByVal Port As Int16, ByVal Group As UInt16, ByRef pData As My_data_struct, ByVal Mode As UInt16, ByVal OPOM As UInt16) As Int16
End Function
<System.Runtime.InteropServices.DllImport("dnc20_2.dll")>
Private Shared Function DNC20_WriteE5E6(ByVal Port As Int16, ByVal Group As UInt16, ByVal ParType As UInt16, ByVal ParPos As UInt16, ByVal ParVal As UInt32, ByVal Mode As UInt16) As Int16
End Function
<System.Runtime.InteropServices.DllImport("dnc20_2.dll")>
Private Shared Function DNC20_ReadExxxxx(ByVal Port As Int16, ByVal Group As UInt16, ByVal ElemNb As UInt16, ByRef DataList As tDNC20_ObjectList, ByRef Data As UInt32, ByVal Mode As UInt16) As Int16
End Function
Private m_MachManaging As MachManaging
Friend ReadOnly Property MachManaging As MachManaging
Get
Return m_MachManaging
End Get
End Property
Private m_sConnectionString As String = "XIP01,0,63,0,0,0"
Public ReadOnly Property sConnectionString As String
Get
Return m_sConnectionString
End Get
End Property
Private m_nPortVariables As Int16
Public ReadOnly Property nPortVariables As Int16
Get
Return m_nPortVariables
End Get
End Property
Private m_nPortWVariables As Int16
Public ReadOnly Property nPortWVariables As Int16
Get
Return m_nPortWVariables
End Get
End Property
Private m_nPortCommands As Int16
Public ReadOnly Property nPortCommands As Int16
Get
Return m_nPortCommands
End Get
End Property
Private m_nPortFileTransfer As Int16
Public ReadOnly Property nPortFileTransfer As Int16
Get
Return m_nPortFileTransfer
End Get
End Property
Private m_bIsTransferActive As Boolean = False
Public ReadOnly Property bIsTransferActive As Boolean
Get
Return m_bIsTransferActive
End Get
End Property
'Private objDRunTimeSystem As FXServer.DRunTimeSystem
Private WithEvents objDGroupManager As APServer.DGroupManager
Private WithEvents objDGeneralFunction As APServer.DGeneralFunctions
Private WithEvents objDMainCncData As APServer.DMainCncData
Private WithEvents objErrorHandler As APLog.ErrorHandler
Private WithEvents objDReadELS As APServer.DReadELS
Private WithEvents objDReadPlcVarList As APServer.DReadPlcVarList
Private WithEvents objDFileTransfer As APServer.DFileTransfer
Private WithEvents objDPosition As APServer.DPosition
Private WithEvents objDMdiCommand As APServer.DMdiCommand
Private WithEvents objDVariables As APServer.DVariables
Private WithEvents objDCncMode As APServer.DCncMode
Private WithEvents objDReadOperatorMessage As APServer.DReadOperatorMessage
Private m_CNCVersion As String = ""
Private _PartProgramNumber As Single
Private _CNCAxisChannelArray As String() = New String() {"Channel 1", "Channel 2"}
Private m_ChannelList As New List(Of String)
' Arraylist for read out the messages
Private m_ReadFXMessages As New List(Of ReadMessages)
Private m_ReadOperatorMessages As New List(Of ReadMessages)
' lista variabili in lettura
Private Shared m_ReadingVars(100) As CommVar
Private m_BytesTransferedCounter As Integer
Private m_LinearAxisPrecision As Integer
Public Sub New(MachManaging As MachManaging)
m_MachManaging = MachManaging
End Sub
#Region "METHODS"
Friend Sub InitFxServer()
End Sub
Friend Function InitConnection() As Boolean
' recupero stringa di connessione
GetPrivateProfileString(S_GENERAL, K_CONNECTIONSTRING, "XIP01,0,63,0,0,0", m_sConnectionString, CurrentMachine.sMachIniFile)
Dim nRet, nRet2, nRet3, nRet4 As Int16
' inizializzo comunicazione
nRet = SetPLCTool(sConnectionString)
If nRet <> 0 Then
EgtOutLog("Communication not available (SetPLCTool) : " & nRet.ToString & " - " & sConnectionString)
Return False
End If
'Richiedo porta comunicazione PC-CN
nRet = Get_Port(m_nPortVariables)
nRet2 = Get_Port(m_nPortCommands)
nRet3 = Get_Port(m_nPortFileTransfer)
nRet4 = Get_Port(m_nPortWVariables)
If nRet <> 0 OrElse nRet2 <> 0 OrElse nRet3 <> 0 OrElse nRet4 <> 0 Then
EgtOutLog("Ports not available (Get_Port) : " & nRet.ToString() & " " & nRet2.ToString() & " " & nRet3.ToString() & " " & nRet4.ToString())
' Connection error
m_MachManaging.SetConnected(False)
m_ResultCallbackDlg(CommandTypes.CONNECT, CommandStates.ERROR_, ResultTypes.RESULT, "")
Return False
Else
EgtOutLog("Port connected: " & nPortVariables.ToString() & " " & nPortCommands.ToString() & " " & nPortFileTransfer.ToString() & " " & nPortWVariables.ToString())
' Connected
m_MachManaging.SetConnected(True)
m_ResultCallbackDlg(CommandTypes.CONNECT, CommandStates.OK, ResultTypes.RESULT, "")
End If
' attivo programma main
Map.refMachManaging.Num_Axium_PCToolkit.ActivateProg(9000)
Return True
End Function
Friend Sub CloseFxObjects()
If Not IsNothing(objDReadOperatorMessage) Then
objDReadOperatorMessage.Close()
System.Runtime.InteropServices.Marshal.ReleaseComObject(objDReadOperatorMessage)
objDReadOperatorMessage = Nothing
End If
If Not IsNothing(objDCncMode) Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(objDCncMode)
objDCncMode = Nothing
End If
If Not IsNothing(objDReadPlcVarList) Then
objDReadPlcVarList.Close()
System.Runtime.InteropServices.Marshal.ReleaseComObject(objDReadPlcVarList)
objDReadPlcVarList = Nothing
End If
If Not IsNothing(objDVariables) Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(objDVariables)
objDVariables = Nothing
End If
If Not IsNothing(objDMdiCommand) Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(objDMdiCommand)
objDMdiCommand = Nothing
End If
If Not IsNothing(objDPosition) Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(objDPosition)
objDPosition = Nothing
End If
If Not IsNothing(objDFileTransfer) Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(objDFileTransfer)
objDFileTransfer = Nothing
End If
If Not IsNothing(objDReadELS) Then
objDReadELS.Close()
System.Runtime.InteropServices.Marshal.ReleaseComObject(objDReadELS)
objDReadELS = Nothing
End If
If Not IsNothing(objErrorHandler) Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(objErrorHandler)
objErrorHandler = Nothing
End If
If Not IsNothing(objDGeneralFunction) Then
objDGeneralFunction.Connect(0)
System.Runtime.InteropServices.Marshal.ReleaseComObject(objDGeneralFunction)
objDGeneralFunction = Nothing
End If
If Not IsNothing(objDMainCncData) Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(objDMainCncData)
objDMainCncData = Nothing
End If
If Not IsNothing(objDGroupManager) Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(objDGroupManager)
objDGroupManager = Nothing
End If
Dim ServerProcList As Process() = Process.GetProcessesByName("APServer")
Dim LogProcList As Process() = Process.GetProcessesByName("APLog")
For Each ServerProc In ServerProcList
ServerProc.Kill()
Next
For Each LogProc In LogProcList
LogProc.Kill()
Next
End Sub
Friend Sub GetGeneralFunctions()
End Sub
Friend Sub Start()
' Annullo variabile E30099 per trasferimento programmi
Dim SendPermissionVariable As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = SENDPERMISSION)
If Not IsNothing(SendPermissionVariable) Then
SendPermissionVariable.sValue = 0
End If
Dim nRet As Int16 = -1
nRet = StartNC(nPortCommands)
If nRet <> 0 Then
EgtOutLog("Error in start: " & nRet)
End If
End Sub
Friend Sub Stop_()
Dim nRet As Int16 = -1
nRet = StopNC(nPortCommands)
If nRet <> 0 Then
EgtOutLog("Error in stop: " & nRet)
End If
End Sub
Friend Sub Reset()
Dim nRet As Int16 = -1
nRet = InitNC(nPortCommands)
If nRet <> 0 Then
EgtOutLog("Error in reset: " & nRet)
End If
End Sub
Friend Sub SetMode(value As CNMode)
WriteObjectVarious2(nPortCommands, MODE, value)
End Sub
Friend Sub SetChannel(value As Integer)
'ChangeChannel(CShort(value))
End Sub
Friend Sub ActivateProg(PartProgramNumberActivate As Integer)
Dim nRes As Int16 = -1
nRes = WriteObjectVarious2(nPortFileTransfer, ACTIVE_PROG, PartProgramNumberActivate)
If nRes <> 0 Then
EgtOutLog("Error Activate Program: " & nRes.ToString())
End If
' scrivo evento programma attivato
DbControllers.m_LogMachineController.Create(LogEvent.CreateMachCommandLog(LogEvent.MachineCommands.PROGRAM_ACTIVATION, PartProgramNumberActivate, nRes <> 0, DbControllers.SupervisorId))
End Sub
Private Sub ChangeChannel(Channel As Short)
End Sub
Friend Sub StartReadList()
Dim nPLCVarIndex As Integer = 0
Dim PlcVariablesList As New ArrayList
Dim sPLCVariableList = ""
For VarIndex = 0 To m_ReadingVars.Length - 1
Dim CommVar As CommVar = m_ReadingVars(VarIndex)
If Not IsNothing(CommVar) AndAlso CommVar.Paragraph = CommVar.Paragraphs.MAIN AndAlso CommVar.nType = CommVar.Types.CN Then
PlcVariablesList.Add(CommVar.sAddress)
If Not String.IsNullOrWhiteSpace(sPLCVariableList) Then
sPLCVariableList &= ","
End If
sPLCVariableList &= """" & CommVar.sAddress & """"
CommVar.Index = nPLCVarIndex
nPLCVarIndex += 1
End If
Next
Dim _FXReturn As Short = objDVariables.Init(objDGroupManager.Handle, sPLCVariableList, 1) 'PlcVariablesList.ToArray().ToString())
End Sub
Friend Sub StartReadPLCList()
Dim nPLCVarIndex As Integer = 0
Dim PlcVariablesList As New ArrayList
Dim sPLCVariableList = ""
For VarIndex = 0 To m_ReadingVars.Length - 1
Dim CommVar As CommVar = m_ReadingVars(VarIndex)
If Not IsNothing(CommVar) AndAlso CommVar.nType = CommVar.Types.PLC AndAlso
CommVar.Paragraph = CommVar.Paragraphs.MAIN Then
PlcVariablesList.Add(CommVar.sAddress)
If Not String.IsNullOrWhiteSpace(sPLCVariableList) Then
sPLCVariableList &= ","
End If
sPLCVariableList &= CommVar.sAddress
CommVar.Index = nPLCVarIndex
nPLCVarIndex += 1
End If
Next
objDReadPlcVarList.Argument = sPLCVariableList ' "%M5.L,%M5.B"
Dim h = objDReadPlcVarList.Init(objDGroupManager.Handle)
End Sub
Friend Sub CloseReadList()
End Sub
Private Sub ReadVariablesOnce(Address As String)
End Sub
Friend Sub WritePlcVariables(Address As String, value As String)
Try
Dim dValue As Double = 0
StringToDoubleAdv(value, dValue)
Select Case Address
Case "E30099" ' in realta' per scrivere si usa la %RD0C.L
Dim nRes = WriteLadderVar(m_nPortWVariables, RL, &HD0C, 1, dValue)
EgtOutLog("Scrittura E30099 - result " & nRes)
Case Else ' E30000
Dim nType As eVarious4
Dim nValue As Integer = 0
Dim sAddressNumber As Integer = Address.Substring(1)
Dim nAddressNumber As Integer = 0
If Not Integer.TryParse(sAddressNumber, nAddressNumber) Then Return
If nAddressNumber >= 30000 AndAlso nAddressNumber < 40000 Then
nType = eVarious4.E30000
nAddressNumber -= 30000
End If
Dim Group As UInt16 = 0
Dim ParType As UInt16 = 3
Dim ParPos As UInt16 = nAddressNumber
If Not Integer.TryParse(value, nValue) Then Return
EgtOutLog("WritePLCVariables - nType: " & nType & " nFirst: " & nAddressNumber & " Data: " & nValue)
EgtOutLog("WritePLCVariables - nPortVariables: " & nPortVariables & " Group: " & Group & " ParType: " & ParType & " ParPos: " & ParPos & " nValue: " & nValue)
Dim rc As Short = DNC20_WriteE5E6(m_nPortWVariables, Group, ParType, ParPos, nValue, SYN)
EgtOutLog("WritePLCVariables - return value: " & rc)
End Select
Catch ex As Exception
EgtOutLog("Error in DNC20_WriteE5E6: " & ex.Message)
End Try
End Sub
Public Shared Function InitVar(Variable As CommVar) As CommVar
Dim Index As Integer = Array.IndexOf(m_ReadingVars, Nothing)
m_ReadingVars(Index) = Variable
Return m_ReadingVars(Index)
End Function
Friend Sub StartReadELS()
For Index = 0 To m_ReadingVars.Length - 1
If IsNothing(m_ReadingVars(Index)) Then Continue For 'OrElse m_ReadingVars(Index).nType <> CommVar.Types.CN Then Continue For
Dim rc As Short = objDReadELS.AddParameter(m_ReadingVars(Index).sAddress, Index + 1)
If rc <> 0 Then EgtOutLog(" Error AddParameter2 : " & rc & " on Variable : " & m_ReadingVars(Index).sAddress)
Next
End Sub
Friend Sub CloseReadELS()
End Sub
Public Sub RefreshAllVars()
For Each Var In m_ReadingVars
' rileggo solo variabili continue
If Not IsNothing(Var) AndAlso Var.nReadType = CommVar.ReadTypes.CONTINUOUS Then
Dim MyData As New My_data_struct
If Var.nType = CommVar.Types.CN Then
Dim nret As Short = -1
Dim nType As eVarious4
Dim sAddressNumber As Integer = Var.sAddress.Substring(1)
Dim nAddressNumber As Integer = 0
If Not Integer.TryParse(sAddressNumber, nAddressNumber) Then Return
If nAddressNumber >= 82000 Then
nType = eVarious4.E82000
nAddressNumber -= 82000
ElseIf nAddressNumber >= 81000 Then
nType = eVarious4.E81000
nAddressNumber -= 81000
ElseIf nAddressNumber >= 80000 Then
nType = eVarious4.E80000
nAddressNumber -= 80000
End If
nret = ReadObjectVarious4(nPortVariables, nType, nAddressNumber, 1, MyData, SYN)
If nret = 0 Then
Dim nVal As Integer = BitConverter.ToInt32(MyData.data, 0)
Var.SetValue(nVal)
End If
ElseIf Var.nType = CommVar.Types.PLC Then
Dim nRet As Short = -1
Dim nRes As Integer
Select Case Var.sAddress
Case "%R3.2"
nRet = ReadLadderVar(nPortVariables, R2, &H3, 1, MyData, SYN)
nRes = If(MyData.data(0) <> 0, 1, 0)
Case "%R3.1"
nRet = ReadLadderVar(nPortVariables, R1, &H3, 1, MyData, SYN)
nRes = If(MyData.data(0) <> 0, 1, 0)
'EgtOutLog("Variabile: " & Var.sAddress & "DVal: " & nRes & " Valore: " & MyData.data(0) & "," & MyData.data(1) & "," & MyData.data(2) & "," & MyData.data(3))
Case "%V800.L"
nRet = ReadLadderVar(nPortVariables, VL, &H800, 4, MyData, SYN)
nRes = BitConverter.ToInt32(MyData.data, 0)
Case "%V804.L"
nRet = ReadLadderVar(nPortVariables, VL, &H804, 4, MyData, SYN)
nRes = BitConverter.ToInt32(MyData.data, 0)
Case "%V808.L"
nRet = ReadLadderVar(nPortVariables, VL, &H808, 4, MyData, SYN)
nRes = BitConverter.ToInt32(MyData.data, 0)
Case "%V80C.L"
nRet = ReadLadderVar(nPortVariables, VL, &H80C, 4, MyData, SYN)
nRes = BitConverter.ToInt32(MyData.data, 0)
Case "%V810.L"
nRet = ReadLadderVar(nPortVariables, VL, &H810, 4, MyData, SYN)
nRes = BitConverter.ToInt32(MyData.data, 0)
Case "%V814.L"
nRet = ReadLadderVar(nPortVariables, VL, &H814, 4, MyData, SYN)
nRes = BitConverter.ToInt32(MyData.data, 0)
Case Else
Dim nType As eVarious4
Dim sAddressNumber As Integer = Var.sAddress.Substring(1)
Dim nAddressNumber As Integer = 0
If Not Integer.TryParse(sAddressNumber, nAddressNumber) Then Return
If nAddressNumber >= 30000 Then
nType = eVarious4.E30000
nAddressNumber -= 30000
'EgtOutLog("E30000 var trovata")
End If
If nType = eVarious4.E30000 Then
Dim Group As UInt16 = 0
Dim ObjectList As New tDNC20_ObjectList With {.ElemNum = 3,
.First = nAddressNumber,
.Quantity = 1}
EgtOutLog("E30000 var trovata, valori: " & nPortVariables & " " & Group & "" & ObjectList.First & " " & nRes)
nRet = DNC20_ReadExxxxx(nPortVariables, Group, 1, ObjectList, nRes, SYN)
EgtOutLog("E30000 var risultato: " & nRet)
If nRet = 0 Then
Var.SetValue(nRes)
EgtOutLog("E30000 var assegnata: " & nRes)
End If
End If
End Select
If nRet = 0 Then
EgtOutLog("Variabile: " & Var.sAddress & "DVal: " & nRes)
Var.SetValue(nRes)
End If
End If
End If
Next
End Sub
#Region "File transfer"
Friend Sub FileDownload(nFileType As Integer, sFilePath As String)
m_bIsTransferActive = True
Dim FileTransferThread As New Thread(Sub()
' leggo variabile E30099
Dim SendPermissionVariable As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = SENDPERMISSION)
Dim nSendPermission As Integer = 0
EgtOutLog("Inizio invio programma")
While nSendPermission <> 2
Dim bFirstWriteOne = True
EgtOutLog("Inizio ciclo verifica diverso da 2")
' leggo valore
If Not IsNothing(SendPermissionVariable.sValue) Then
Integer.TryParse(SendPermissionVariable.sValue, nSendPermission)
EgtOutLog("Lettura variabile E30099: " & nSendPermission)
Else
EgtOutLog("nSendPermission = -1")
nSendPermission = -1
End If
' se uguale a zero ci scrivo uno
If nSendPermission = 0 And bFirstWriteOne Then
bFirstWriteOne = False
SendPermissionVariable.sValue = 1
EgtOutLog("Scrittura variabile E30099 = 1")
End If
Threading.Thread.Sleep(1000)
End While
Dim nRes As Int16 = -1
Dim nIndex As Int16 = 0
DncDeleteFile(nPortFileTransfer, nFileType)
EgtOutLog("Start download - " & nPortFileTransfer & nFileType & sFilePath & nIndex)
nRes = DownLoadFileAsyn(nPortFileTransfer, nFileType, sFilePath, DNC_MODE_FIRST, nIndex)
m_BytesTransferedCounter = nIndex
If nRes <> DNC_IN_PROGRES Then
EgtOutLog("DownLoadFileAsyn error:" & nRes)
nRes = DownLoadFileAsyn(nPortFileTransfer, nFileType, sFilePath, DNC_MODE_ABORT, nIndex)
m_BytesTransferedCounter = 0
m_bIsTransferActive = False
Return
End If
While nRes = DNC_IN_PROGRES
EgtOutLog("Continuing download - " & nPortFileTransfer & nFileType & sFilePath & nIndex & nRes)
nRes = DownLoadFileAsyn(nPortFileTransfer, nFileType, sFilePath, DNC_MODE_CONTINUE, nIndex)
m_BytesTransferedCounter = nIndex
Map.refMyStatusBarVM.SetOutputMessage("Bytes sent: " & nIndex)
Threading.Thread.Sleep(100)
End While
If nRes <> 0 Then
EgtOutLog("DownLoadFileAsyn error: " & nRes)
Map.refMyStatusBarVM.SetOutputMessage("DownLoadFileAsyn error: " & nRes, 2)
Else
EgtOutLog("DownLoadFileAsyn OK")
Map.refMyStatusBarVM.SetOutputMessage("DownLoadFileAsyn OK", 2)
' aggiorno variabili del MAIN
Dim ISONumVariable As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = ISO_NUM)
Dim ISOSentVariable As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = ISO_SENT)
EgtOutLog("Trovate variabili: " & ISONumVariable.sAddress & ISOSentVariable.sAddress)
Dim SentMachGroup As MyMachGroupVM = Map.refSupervisorMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x As MyMachGroupVM) x.bSendingToMachine)
EgtOutLog("Trovate variabili: " & ISONumVariable.sAddress & ISOSentVariable.sAddress & SentMachGroup.Name)
If Not IsNothing(SentMachGroup) Then
EgtOutLog("Trovato Machgroup")
Try
ISONumVariable.sValue = SentMachGroup.Name
ISOSentVariable.sValue = 0
SentMachGroup.SetSentToMachine(True)
Catch ex As Exception
EgtOutLog("Error write var after download: " & ex.Message)
End Try
End If
End If
nRes = DownLoadFileAsyn(nPortFileTransfer, nFileType, sFilePath, DNC_MODE_ABORT, nIndex)
SendPermissionVariable.sValue = 0
m_BytesTransferedCounter = 0
Threading.Thread.Sleep(1000)
m_bIsTransferActive = False
Return
End Sub)
' avvio thread di gestione della macchina che avvia la connessione
FileTransferThread.Start()
End Sub
Private Sub FileUpload(sFileType As String, sFilePath As String)
End Sub
Friend Sub FileDelete(sFileType As String, sFilePath As String)
Dim nRes As Int16 = -1
nRes = DncDeleteFile(nPortFileTransfer, sFileType)
If nRes <> 0 Then
EgtOutLog("Delete file not executed")
End If
End Sub
#End Region ' File transfer
#Region "MDI"
Friend Sub MDI_Execute(sCommand As String)
Dim nRes As Int16 = -1
nRes = DNC20_DialWithModes_2(nPortCommands, sCommand, SYN)
If nRes = 0 Then
Map.refMDIPageVM.SendMDIResult(nRes)
Else
EgtOutLog("DialWithModes2 error " & nRes)
End If
End Sub
#End Region ' MDI
#Region "Variables"
Friend Sub WriteNCVariables(Address As String, value As String)
Try
Dim dValue As Double = 0
StringToDoubleAdv(value, dValue)
Dim nType As eVarious4
Dim nValue As Integer = 0
Dim MyData As New My_data_struct
Dim sAddressNumber As Integer = Address.Substring(1)
Dim nAddressNumber As Integer = 0
If Not Integer.TryParse(sAddressNumber, nAddressNumber) Then Return
If nAddressNumber > 82000 Then
nType = eVarious4.E82000
nAddressNumber -= 82000
ElseIf nAddressNumber > 81000 Then
nType = eVarious4.E81000
nAddressNumber -= 81000
ElseIf nAddressNumber > 80000 Then
nType = eVarious4.E80000
nAddressNumber -= 80000
End If
If Not Integer.TryParse(value, nValue) Then Return
MyData.data = BitConverter.GetBytes(CLng(nValue))
EgtOutLog("WriteNCVariables - nType: " & nType & " nFirst: " & nAddressNumber & " Data: " & nValue)
Dim rc As Short = WriteObjectVarious4(nPortWVariables, nType, nAddressNumber, 1, nValue)
Catch ex As Exception
EgtOutLog("Error in WriteObjectVarious4: " & ex.Message)
End Try
End Sub
#End Region ' Variables
#End Region ' METHODS
#Region "EVENTS"
Private Sub objDRunTimeSystem_ServerInitializationFinished()
'InitFxObjects()
GetGeneralFunctions()
End Sub
Private Sub objDRunTimeSystem_ServerReinitializationStarted()
CloseFxObjects()
End Sub
Private Sub objDGeneralFunction_OnCncStart(ByVal errorCode As Short)
Dim bOk As Boolean = (errorCode = 0)
m_MachManaging.SetStartPending(bOk)
m_ResultCallbackDlg(CommandTypes.START, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, If(bOk, "", "Error CNC Start: " & errorCode.ToString()))
End Sub
Private Sub objDGeneralFunction_OnCncStop(ByVal errorCode As Short)
Dim bOk As Boolean = (errorCode = 0)
m_ResultCallbackDlg(CommandTypes.STOP_, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, If(bOk, "", "Error Feed Hold: " & errorCode.ToString()))
End Sub
Private Sub objDGeneralFunction_OnCncReset(ByVal errorCode As Short)
Dim bOk As Boolean = (errorCode = 0)
m_ResultCallbackDlg(CommandTypes.RESET, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, If(bOk, "", "Error CNC Reset: " & errorCode.ToString()))
End Sub
Private Sub objDGeneralFunction_CncModeWritten(ByVal errorCode As Short)
If errorCode <> 0 Then EgtOutLog("Error CNC Mode selection completed:" & " " & errorCode.ToString())
End Sub
Private Sub objDGroupManager_ErrorHandler(ByVal sError As String, ByVal nTextNumber As Short)
EgtOutLog("ErrorHandler message:" & " " & sError & " " & "ErrorHandler number:" & " " & nTextNumber.ToString())
End Sub
Private Sub objDGroupManager_AssignmentChanged(ByVal CncNumber As Short, ByVal AxisGroup As Short)
m_ChannelCallbackDlg(AxisGroup)
End Sub
Private Sub _comboCncAxisChannel_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
End Sub
Private Sub objDGeneralFunction_VariableWritten(ByVal errorCode As Short)
If errorCode <> 0 Then
MessageBox.Show("Error from VariableWritten:" & " " & errorCode.ToString())
Else
MessageBox.Show("VariableWritten successfully")
End If
End Sub
Private Sub objErrorHandler_ErrorOnCnc(ByVal cnc As Short, ByVal channel As Short, ByVal [set] As Short)
End Sub
Private Sub objErrorHandler_ErrorOnOtherChannel(ByVal status As Short)
End Sub
Private Sub objErrorHandler_Exception(ByVal status As Short)
End Sub
Friend Sub objErrorHandler_ErrorFromActiveCnc2(ErrorNumber As List(Of Integer))
' resetto stati bFound
For Each Message In m_ReadFXMessages
Message.bFound = False
Next
For index As Integer = 0 To ErrorNumber.Count - 1
Dim Ind As Integer = index
Dim NewMessageInList As ReadMessages = m_ReadFXMessages.FirstOrDefault(Function(x) x.CMsgCncNumber = 0.ToString() AndAlso
x.CMsgErrorType = 6.ToString() AndAlso
x.CMsgErrorIndex = "" AndAlso
x.CMsgErrorNumber = ErrorNumber(Ind).ToString() AndAlso
x.CMsgErrorLine = "" AndAlso
x.CMsgErrorMessage = "")
' se il messaggio e' gia' in lista
If Not IsNothing(NewMessageInList) Then
' lo segno come trovato
NewMessageInList.bFound = True
Else
' lo aggiungo
Dim NewMessage As ReadMessages = New ReadMessages(0.ToString(),
6.ToString(),
"",
ErrorNumber(index).ToString(),
"",
"",
"")
NewMessage.bFound = True
m_ReadFXMessages.Add(NewMessage)
m_NUMAlarmCallbackDlg(0, 0, 6.ToString(), "", ErrorNumber(index).ToString(), "", "", "")
End If
Next
' cancello messaggi non trovati
For Index = m_ReadFXMessages.Count - 1 To 0 Step -1
Dim Message As ReadMessages = m_ReadFXMessages(Index)
If Not Message.bFound Then
m_NUMAlarmCallbackDlg(Message.CMsgCncNumber, 1, Message.CMsgErrorType, Message.CMsgErrorIndex, Message.CMsgErrorNumber, Message.CMsgErrorLine, Message.CMsgErrorMessage, Message.CMsgErrorAdditional)
m_ReadFXMessages.RemoveAt(Index)
End If
Next
End Sub
#Region "PLC Variables"
Private Sub objDPlcVariables_ReadVariablesChanged(ByVal index As Object, ByVal value As Object)
Dim _ObjIndex As Object() = CType(index, Object())
Dim _ObjValue As Object() = CType(value, Object())
For index = 0 To _ObjIndex.Length - 1
Dim nObjIndex As Integer = Integer.Parse(_ObjIndex(index).ToString())
Dim CommVar As CommVar = m_ReadingVars.FirstOrDefault(Function(x) Not IsNothing(x) AndAlso
x.Paragraph = CommVar.Paragraphs.MAIN AndAlso
x.nType = CommVar.Types.CN AndAlso
x.Index = nObjIndex)
If Not IsNothing(CommVar) Then
CommVar.SetValue(_ObjValue(index).ToString())
End If
Next
End Sub
Private Sub objDPlcVariables_ReadPLCVariablesChanged(ByVal index As Object, ByVal value As Object)
Dim _ObjIndex As Object() = CType(index, Object())
Dim _ObjValue As Object() = CType(value, Object())
For index = 0 To _ObjIndex.Length - 1
Dim nObjIndex As Integer = Integer.Parse(_ObjIndex(index).ToString())
Dim CommVar As CommVar = m_ReadingVars.FirstOrDefault(Function(x) Not IsNothing(x) AndAlso
x.Paragraph = CommVar.Paragraphs.MAIN AndAlso
x.nType = CommVar.Types.PLC AndAlso
x.Index = nObjIndex)
If Not IsNothing(CommVar) Then
CommVar.SetValue(_ObjValue(index).ToString())
End If
Next
End Sub
Private Sub objDPlcVariables_InvalidReadList(ByVal errorCode As Short)
EgtOutLog("InvalidReadList - ErrorCode: " & errorCode)
End Sub
Private Sub objDPlcVariables_AbortReadVariables()
EgtOutLog("InvalidReadList - ErrorCode: ")
End Sub
Private Sub objDPlcVariables_ReadOnceVariablesChanged(ByVal lHandle As Integer, ByVal value As Object)
End Sub
Private Sub objDPlcVariables_VariablesWritten2(ByVal lHandle As Integer, ByVal errorCode As Integer)
Dim bOk As Boolean = (errorCode <> 0)
m_ResultCallbackDlg(CommandTypes.WRITE, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.RESULT, If(bOk, "", "Error VariablesWritten2 :" & " " & errorCode.ToString()))
End Sub
#End Region ' PLC Variables
#Region "ReadELS"
Private Sub objDReadELS_ValueChanged(ByVal nHandle As Short, ByVal dValue As Double, ByVal nerrorCode As Short)
If nHandle < 1 OrElse nHandle > m_ReadingVars.Count - 1 Then Return
If nerrorCode <> 0 Then EgtOutLog(" Error in Validchanged2 : " & nerrorCode & " Handle : " & nHandle)
Try
m_ReadingVars(nHandle - 1).SetValue(dValue.ToString("F04"))
Catch Ex As Exception
EgtOutLog(Ex.Message)
End Try
End Sub
#End Region ' ReadELS
#Region "Position"
Friend Sub ReadPosition()
Dim nRet As Short = -1
Dim Group As UInt16 = 0
Dim MyData As New My_data_struct
nRet = DNC20_Position_OPOM(nPortVariables, Group, MyData, SYN, OPOMTYPE.OM)
EgtOutLog("nRet: " & nRet)
If nRet <> 0 Then
EgtOutLog("Error in axis reading! Error: " & nRet)
Return
End If
Dim AxisValid(8) As Boolean
For AxisIndex = 0 To 8
Dim AxisStart = AxisIndex * 16
Dim n As Integer = AxisIndex * 16
AxisValid(AxisIndex) = (MyData.data(n) <> 0)
If AxisValid(AxisIndex) Then
If AxisIndex < 6 Then
Dim dAxisPosition As Double = (BitConverter.ToInt32(MyData.data, n + 4)) 'Vmminch ' X
m_AxisCoordinatesCallbackDlg(dAxisPosition, AxisIndex)
Else
Dim dAxisPosition As Double = (BitConverter.ToInt32(MyData.data, n + 4)) 'NumCifreDecP4 ' A
m_AxisCoordinatesCallbackDlg(dAxisPosition, AxisIndex)
End If
End If
Next
End Sub
#End Region ' Position
#Region "Variables"
Private Sub objDVariables_VariableWritten2(ByVal lHandle As Integer, ByVal errorCode As Short)
If lHandle <> 2 OrElse errorCode <> 0 Then
EgtOutLog(" Error on objDVariables_VariableWritten2 : handle " & lHandle.ToString() & " errorCode : " & errorCode.ToString())
End If
End Sub
Private Sub objDVariables_VariableWritten(ByVal errorCode As Short)
If errorCode <> 0 Then
EgtOutLog(" Error on objDVariables_VariableWritten errorCode : " & errorCode.ToString())
End If
End Sub
Private Sub objDVariables_ValueChanged(ByVal vtArrayIndex As Object, ByVal vtArrayValues As Object)
Dim AplArrayIndex As Object() = CType(vtArrayIndex, Object())
Dim AplArrayValue As Object() = CType(vtArrayValues, Object())
For index As Integer = 0 To AplArrayIndex.Length - 1
Dim nHandle As Integer = CType(AplArrayIndex.GetValue(index), Int16)
If nHandle < 1 OrElse nHandle > m_ReadingVars.Count - 1 Then Return
Dim dValue As Double = CDbl(AplArrayValue.GetValue(index))
Try
m_ReadingVars(nHandle - 1).SetValue(dValue.ToString("F04"))
Catch Ex As Exception
EgtOutLog(Ex.Message)
End Try
Next
End Sub
#End Region ' Variables
#Region "CNCMode"
Friend Sub ReadCncMode()
Dim nRet As Short = -1
Dim nMode As UInt16
nRet = ReadObjectVarious2(nPortVariables, eVarious2.MODE, nMode, SYN)
If nRet <> 0 Then
EgtOutLog("Reading CncMode failed! Error: " & nRet)
Return
End If
m_OpModeCallbackDlg(nMode)
End Sub
#End Region ' CNCMode
#Region "ReadOperatorMessage"
Private Sub objDReadOperatorMessage_ValueChanged(ByVal line As Object)
' resetto stati bFound
For Each Message In m_ReadOperatorMessages
Message.bFound = False
Next
Dim objLine As String = TryCast(line, String)
Dim OpMsgErrType As Integer = 30
Dim NewMessageInList As ReadMessages = m_ReadOperatorMessages.FirstOrDefault(Function(x) x.CMsgCncNumber = 0 AndAlso
x.CMsgErrorType = OpMsgErrType.ToString() AndAlso
x.CMsgErrorIndex = "" AndAlso
x.CMsgErrorNumber = "" AndAlso
x.CMsgErrorLine = "" AndAlso
x.CMsgErrorMessage = objLine AndAlso
x.CMsgErrorAdditional = "")
' se il messaggio e' gia' in lista
If Not IsNothing(NewMessageInList) Then
' lo segno come trovato
NewMessageInList.bFound = True
Else
' se e' diverso da stringa vuota
If Not String.IsNullOrWhiteSpace(objLine.ToString()) Then
' lo aggiungo
Dim NewMessage As ReadMessages = New ReadMessages(0,
OpMsgErrType.ToString(),
"",
"",
"",
objLine,
"")
NewMessage.bFound = True
m_ReadOperatorMessages.Add(NewMessage)
m_NUMAlarmCallbackDlg(0, 0, OpMsgErrType.ToString(), "", "", "", objLine, "")
End If
End If
' cancello messaggi non trovati
If m_ReadOperatorMessages.Count > 0 Then
For Index = m_ReadOperatorMessages.Count - 1 To 0 Step -1
Dim Message As ReadMessages = m_ReadOperatorMessages(Index)
If Not Message.bFound Then
m_NUMAlarmCallbackDlg(Message.CMsgCncNumber, 1, Message.CMsgErrorType, Message.CMsgErrorIndex, Message.CMsgErrorNumber, Message.CMsgErrorLine, Message.CMsgErrorMessage, Message.CMsgErrorAdditional)
m_ReadOperatorMessages.RemoveAt(Index)
End If
Next
End If
End Sub
#End Region ' ReadOperatorMessage
#End Region ' EVENTS
End Class