diff --git a/MTC_Adapter/CMSCncLib/CNC/CNC.OSAI/CNC.OSAI_SOAP.vb b/MTC_Adapter/CMSCncLib/CNC/CNC.OSAI/CNC.OSAI_SOAP.vb index 1fc328c..763456a 100644 --- a/MTC_Adapter/CMSCncLib/CNC/CNC.OSAI/CNC.OSAI_SOAP.vb +++ b/MTC_Adapter/CMSCncLib/CNC/CNC.OSAI/CNC.OSAI_SOAP.vb @@ -1072,133 +1072,7 @@ Retry: nRetry += 1 End Function #If False Then - - Public Function getPathGCode1Shot() As Focas1.ODBGCD - ' RIFERIMENTO: - ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Misc\cnc_rdgcode.htm - - Dim nPathIdx As Integer - Dim nNumAxisRead As Integer - Dim nReturn As Integer - - Dim actGCode As Focas1.ODBGCD - ' inizializzo - actGCode = New Focas1.ODBGCD - - 'leggo il numero del processo attivo - nPathIdx = GetActivePath() - 'leggo num max assi dal cn - nNumAxisRead = Focas1.MAX_AXIS - - If Is30Series Then - - ' leggo tutto!!! 0-27 (28 elementi) - nReturn = Focas1.cnc_rdgcode(nLibHandle(nPathIdx), -2, 1, 4, actGCode) - - If F_CheckRetError_Cnc(nReturn, "cnc_rdgcode RefreshPathGCode CNC.FANUC.CMS_CncLib") Then - Throw New CmsNcException("ERR cnc_rdgcode RefreshPathGCode CNC.FANUC.CMS_CncLib") - End If - End If - - Return actGCode - - End Function -#End If - -#If False Then - - Public Function getAllAxisLoad() As Focas1.ODBSVLOAD - ' RIFERIMENTO: - ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rdsvmeter.htm - - Dim nPathIdx As Integer - Dim nNumAxisRead As Integer - Dim nReturn As Integer - - Dim caricoAssi As Focas1.ODBSVLOAD - - 'leggo il numero del processo attivo - nPathIdx = GetActivePath() - 'leggo num max assi dal cn - nNumAxisRead = Focas1.MAX_AXIS - - If Is30Series Then - - ' leggo tutto!!! - nReturn = Focas1.cnc_rdsvmeter(nLibHandle(nPathIdx), nNumAxisRead, caricoAssi) - - If F_CheckRetError_Cnc(nReturn, "cnc_rdsvmeter RefreshAxisMeter CNC.FANUC.CMS_CncLib") Then - Throw New CmsNcException("ERR cnc_rdsvmeter RefreshAxisMeter CNC.FANUC.CMS_CncLib") - End If - End If - - Return caricoAssi - - End Function - - Public Function getGlobalFeedrate() As Focas1.ODBACT - ' RIFERIMENTO: - ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_actf.htm - - Dim nPathIdx As Integer - Dim nNumAxisRead As Integer - Dim nReturn As Integer - - Dim feedData As Focas1.ODBACT - ' inizializzo - feedData = New Focas1.ODBACT - - 'leggo il numero del processo attivo - nPathIdx = GetActivePath() - 'leggo num max assi dal cn - nNumAxisRead = Focas1.MAX_AXIS - - If Is30Series Then - - ' leggo feed globale - nReturn = Focas1.cnc_actf(nLibHandle(nPathIdx), feedData) - - If F_CheckRetError_Cnc(nReturn, "cnc_actf RefreshActFeedRate CNC.FANUC.CMS_CncLib") Then - Throw New CmsNcException("ERR cnc_actf RefreshActFeedRate CNC.FANUC.CMS_CncLib") - End If - End If - - Return feedData - - End Function - - Public Function getSpindleLoad() As Focas1.ODBSPN - ' RIFERIMENTO: - ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rdspload.htm - ' RICHIEDE DRIVER ESTESO!!! NON VA!!! - - Dim nPathIdx As Integer - Dim nNumAxisRead As Integer - Dim nReturn As Integer - - Dim allData As Focas1.ODBSPN - ' inizializzo - allData = New Focas1.ODBSPN - - 'leggo il numero del processo attivo - nPathIdx = GetActivePath() - 'leggo num max assi dal cn - nNumAxisRead = Focas1.MAX_AXIS - - If Is30Series Then - - ' leggo feed globale - nReturn = Focas1.cnc_rdspload(nLibHandle(nPathIdx), -1, allData) - - If F_CheckRetError_Cnc(nReturn, "cnc_rdspload RefreshAllSpindleLoad CNC.FANUC.CMS_CncLib") Then - Throw New CmsNcException("ERR cnc_rdspload RefreshAllSpindleLoad CNC.FANUC.CMS_CncLib") - End If - End If - - Return allData - - End Function - + Public Function getCncAlarm() As Focas1.ODBALMMSG2 ' RIFERIMENTO: @@ -1269,34 +1143,7 @@ Retry: nRetry += 1 End Function - Public Function getSpindleSpeed() As Focas1.ODBSPEED - ' RIFERIMENTO: - ' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rdspeed.htm - - Dim nPathIdx As Integer - Dim nNumAxisRead As Integer - Dim nReturn As Integer - - Dim speedAssi As Focas1.ODBSPEED - - 'leggo il numero del processo attivo - nPathIdx = GetActivePath() - 'leggo num max assi dal cn - nNumAxisRead = Focas1.MAX_AXIS - - If Is30Series Then - - ' leggo tutto!!! - nReturn = Focas1.cnc_rdspeed(nLibHandle(nPathIdx), -1, speedAssi) - - If F_CheckRetError_Cnc(nReturn, "cnc_rdspeed RefreshAxisSpeed CNC.FANUC.CMS_CncLib") Then - Throw New CmsNcException("ERR cnc_rdspeed RefreshAxisSpeed CNC.FANUC.CMS_CncLib") - End If - End If - - Return speedAssi - - End Function + #End If #End Region diff --git a/MTC_Adapter/CMSCncLib/CNC/CNC.SIEMENS/CNC.SIEMENS.vb b/MTC_Adapter/CMSCncLib/CNC/CNC.SIEMENS/CNC.SIEMENS.vb index df4eb41..79ac07e 100644 --- a/MTC_Adapter/CMSCncLib/CNC/CNC.SIEMENS/CNC.SIEMENS.vb +++ b/MTC_Adapter/CMSCncLib/CNC/CNC.SIEMENS/CNC.SIEMENS.vb @@ -12,6 +12,9 @@ Namespace CNC Private m_DataSvcRW As DataSvc Private m_DriveSVC As DrivesSvc + Private m_AlarmService As AlarmSvc + Private m_AlarmGuid As System.Guid + Private currAlarms As Alarm() Private itemRead() As Item Private itemWrite As Item @@ -60,6 +63,9 @@ Namespace CNC Try m_DataSvcRW = New DataSvc m_DriveSVC = New DrivesSvc + m_AlarmService = New AlarmSvc("eng") + ' sottoscrivo allarmi... + m_AlarmGuid = m_AlarmService.Subscribe(New AlarmListChanged(AddressOf AlarmList)) Catch ex As System.IO.FileNotFoundException ' intercetta l'exception se non lanciato sopra l'hmi @@ -1076,6 +1082,8 @@ Namespace CNC ReDim itemRead(maxProc - 1) For i As Integer = 0 To maxProc - 1 itemRead(i) = New Item("/Channel/SelectedFunctions/ncFktAct[u" & i + 1 & ",1,#" & maxGruppi & "]") ' leggo TUTTI i gruppi... + ' verificare sintassi...[u1,1,64] al posto di [u1,1,#64] + 'itemRead(i) = New Item("/Channel/SelectedFunctions/ncFktAct[u" & i + 1 & ",1," & maxGruppi & "]") ' leggo TUTTI i gruppi... Next i 'lettura @@ -1102,6 +1110,53 @@ Namespace CNC End Function + ''' + ''' procedura per risposta alla segnalazione di allarmi... + ''' + ''' + ''' + Public Sub AlarmList(guid As Guid, alarms() As Alarm) + ' are we in GUI thread (main) ? + ' No we are Not in GUI thread => send message to GUI thread + If (False) Then + 'If (lstAlarms.InvokeRequired) Then + + ' chiamo delegato + 'AlarmListChanged alarmDelegate = New AlarmListChanged(AlarmList); + 'BeginInvoke(alarmDelegate, New Object[] { guid, alarms }); + Else + ' sono in main thread --> eseguo! + + ' check if guid Is correct + If (m_AlarmGuid.Equals(guid)) Then + ' salvo! + currAlarms = alarms + + '// clear the listbox + 'lstAlarms.Items.Clear(); + 'setStatus("new alarms"); + '// go through the array for each alarm + 'foreach(Alarm element In alarms) + '{ + '// write the timeStamp, alarmnumber And the alarmmessage to + '// the listbox + 'lstAlarms.Items.Add(element.TimeStamp.ToString() + " | " + + 'element.Id.ToString() + " | " + + 'element.Message); + End If + End If + End Sub + + Public Function getCncAlarm() As Alarm() + ' RIFERIMENTO: + ' SynumerikOperate_Net, pg 101 --> 110 + + '' restituisco vettore allarmi... + Return currAlarms + + End Function + + #End Region End Class diff --git a/MTC_Adapter/MTC_Adapter/AdapterOsai.cs b/MTC_Adapter/MTC_Adapter/AdapterOsai.cs index 4d4adb1..8a746b1 100644 --- a/MTC_Adapter/MTC_Adapter/AdapterOsai.cs +++ b/MTC_Adapter/MTC_Adapter/AdapterOsai.cs @@ -178,7 +178,6 @@ namespace MTC_Adapter /// /// Vettore degli allarmi CNC attivi /// - //public CMSCncLib.OPENcontrol.MSGERROR allarmiCNC; public Dictionary allarmiCNC = new Dictionary(); /// /// estende l'init della classe base... diff --git a/MTC_Adapter/MTC_Adapter/AdapterSiemens.cs b/MTC_Adapter/MTC_Adapter/AdapterSiemens.cs index 0c15e5c..7e8a540 100644 --- a/MTC_Adapter/MTC_Adapter/AdapterSiemens.cs +++ b/MTC_Adapter/MTC_Adapter/AdapterSiemens.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using Siemens.Sinumerik.Operate.Services; namespace MTC_Adapter { @@ -186,7 +187,7 @@ namespace MTC_Adapter /// /// Vettore degli allarmi CNC attivi /// - public CMSCncLib.Focas1.ODBALMMSG2 allarmiCNC; + public Alarm[] allarmiCNC; /// /// estende l'init della classe base... @@ -614,47 +615,12 @@ namespace MTC_Adapter bool fatto = false; try { -#if false - // se ho allarmi li accodo... - if (allNcData.lastncerror != 0) - { - - if (utils.CRI("loglevel") > 5) - { - lg.Info(string.Format("Allarmi CNC: {0} ", allNcData.lastncerror)); - } - string alarmText = string.Format("CNC Alarm - Cod: {0}", allNcData.lastncerror); - - // tolgo eventuali allarmi CNC... - allarmiCNC.Clear(); - allarmiCNC.Add(allNcData.lastncerror.ToString(), alarmText); - - //// 2017.05.09 gestione allarmi commentata - //mAlarmCNC.Add(MTConnect.Condition.Level.FAULT, alarmText, allNcData.lastncerror.ToString(), "", ""); - //// mostro in form! - //sb1.AppendLine(alarmText); - //parentForm.dataMonitor_1 += sb1.ToString(); - - //// 2017.05.09 gestione allarmi commentata - //// il codice è corretto (manca prima aprte codice + traduzione), se cerco di trovare oggett completo NON c'è, verificare con Andrea... - //sb1.AppendLine(string.Format("Allarmi CNC: {0}", allNcData.lastncerror)); - - parentForm.commPlcActive = true; - //inizio = DateTime.Now; - //OSAI_ref.O_ReadCurrentErrorMsg(ref allarmiCNC); - //if (utils.CRB("recTime")) TimingData.addResult("R-CNC-ERROR-MSG", DateTime.Now.Subtract(inizio).Ticks); - //checkCNCAlarms(); - parentForm.commPlcActive = false; - } - else - { - allarmiCNC.Clear(); - allarmiCNC = new Dictionary(); - // 2017.05.09 gestione allarmi commentata - //allarmiCNC = new CMSCncLib.OPENcontrol.MSGERROR(); - } - fatto = true; -#endif + parentForm.commPlcActive = true; + inizio = DateTime.Now; + allarmiCNC = SIEMENS_ref.getCncAlarm(); + if (utils.CRB("recTime")) TimingData.addResult("R-CNC-ERROR-MSG", DateTime.Now.Subtract(inizio).Ticks); + parentForm.commPlcActive = false; + fatto = true; } catch { } @@ -765,36 +731,40 @@ namespace MTC_Adapter private void checkCNCAlarms() { // faccio parse allarmi: se ci sono invio e presento - sendAlarmIfPresent(allarmiCNC.msg1); - sendAlarmIfPresent(allarmiCNC.msg2); - sendAlarmIfPresent(allarmiCNC.msg3); - sendAlarmIfPresent(allarmiCNC.msg4); - sendAlarmIfPresent(allarmiCNC.msg5); - sendAlarmIfPresent(allarmiCNC.msg6); - sendAlarmIfPresent(allarmiCNC.msg7); - sendAlarmIfPresent(allarmiCNC.msg8); - sendAlarmIfPresent(allarmiCNC.msg9); - sendAlarmIfPresent(allarmiCNC.msg10); + if (allarmiCNC != null) + { + if (allarmiCNC.Length > 0) + { + foreach (Alarm allarme in allarmiCNC) + { + sendAlarmIfPresent(allarme); + } + } + } } /// /// Invia singolo allarme CNC se presente /// /// - protected void sendAlarmIfPresent(CMSCncLib.Focas1.ODBALMMSG2_data allarme) + protected void sendAlarmIfPresent(Alarm allarme) { // controllo valore... - if (allarme.alm_no > 0) + if (allarme.Id > 0) { try { StringBuilder sb = new StringBuilder(); if (utils.CRI("loglevel") > 5) { - lg.Info(string.Format("Allarmi CNC: NUM {0} | MESS: {1} | ASSE: {2} | TYPE: {3}", allarme.alm_no, allarme.alm_msg, allarme.axis, allarme.type)); + lg.Info(string.Format("Allarmi CNC: Id {0} | MESS: {1} | CAT: {2} | SRC: {3}", allarme.Id, allarme.Message, allarme.Category, allarme.Source)); } + + // da gestire instance = PATH!!! 1/2, x cui raddoppia i messaggi... + + string codAllarme = string.Format("P{0}:{1}", allarme.Instance, allarme.Id); +#if false // se ho asse accodo ad asse altrimenti no... - string codAllarme = string.Format("T{0}-N{1}", allarme.type, allarme.alm_no); if (allarme.axis == 0) { mAlarmCNC.Add(MTConnect.Condition.Level.FAULT, allarme.alm_msg, codAllarme, "", ""); @@ -802,10 +772,14 @@ namespace MTC_Adapter else { vettAxis[allarme.axis - 1].mAxAlarmCNC.Add(MTConnect.Condition.Level.FAULT, allarme.alm_msg, codAllarme, "", ""); - } + } +#endif // mostro in form! sb.AppendLine(codAllarme); parentForm.dataMonitor_1 += sb.ToString(); + + mAlarmCNC.Add(MTConnect.Condition.Level.FAULT, allarme.Message, codAllarme, "", ""); + } catch (Exception exc) { @@ -977,7 +951,7 @@ namespace MTC_Adapter SIEMENS_ref.getPathGCodeMod(2, ref vettGCod); if (utils.CRB("recTime")) TimingData.addResult("R-GCodModal", DateTime.Now.Subtract(inizio).Ticks); - + #if false diff --git a/MTC_Adapter/MTC_Adapter/ExtLib/Siemens.Sinumerik.Operate.Services.Wrapper.dll b/MTC_Adapter/MTC_Adapter/ExtLib/Siemens.Sinumerik.Operate.Services.Wrapper.dll new file mode 100644 index 0000000..b8d54cf Binary files /dev/null and b/MTC_Adapter/MTC_Adapter/ExtLib/Siemens.Sinumerik.Operate.Services.Wrapper.dll differ diff --git a/MTC_Adapter/MTC_Adapter/ExtLib/Siemens.Sinumerik.Operate.Services.dll b/MTC_Adapter/MTC_Adapter/ExtLib/Siemens.Sinumerik.Operate.Services.dll new file mode 100644 index 0000000..f00469d Binary files /dev/null and b/MTC_Adapter/MTC_Adapter/ExtLib/Siemens.Sinumerik.Operate.Services.dll differ diff --git a/MTC_Adapter/MTC_Adapter/MTC-Adapter.csproj b/MTC_Adapter/MTC_Adapter/MTC-Adapter.csproj index 6697bc8..365e857 100644 --- a/MTC_Adapter/MTC_Adapter/MTC-Adapter.csproj +++ b/MTC_Adapter/MTC_Adapter/MTC-Adapter.csproj @@ -104,6 +104,10 @@ ..\packages\NLog.4.4.4\lib\net45\NLog.dll True + + False + ExtLib\Siemens.Sinumerik.Operate.Services.dll + @@ -178,6 +182,8 @@ Designer + +