From 8ff84820478dbf36b241fac3b5a7796285b8a5c4 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Fri, 24 Mar 2017 18:27:36 +0100 Subject: [PATCH] Inizia gestione primo path su OSAI --- MTC_Adapter/MTC_Adapter/AdapterFanuc.cs | 10 +- MTC_Adapter/MTC_Adapter/AdapterOsai.cs | 323 ++++++++++++------ .../Resources/CMS/Appunti CMS OSAI.txt | 5 + 3 files changed, 221 insertions(+), 117 deletions(-) diff --git a/MTC_Adapter/MTC_Adapter/AdapterFanuc.cs b/MTC_Adapter/MTC_Adapter/AdapterFanuc.cs index 2c3653b..bafbcab 100644 --- a/MTC_Adapter/MTC_Adapter/AdapterFanuc.cs +++ b/MTC_Adapter/MTC_Adapter/AdapterFanuc.cs @@ -752,15 +752,7 @@ namespace MTC_Adapter { vettPath[idxPath].mPathRunMode.Value = runMode; } - - //EsecuzioneRUN-- > "ACTIVE" - //EsecuzioneREADY-- > "READY" - //EsecuzioneSTOP-- > "STOPPED" - //EsecuzioneFEEDHOLD-- > "FEED_HOLD" - //EsecuzioneOSTOP-- > "OPTIONAL_STOP" - //EsecuzionePSTOP-- > "PROGRAM_STOPPED" - //EsecuzionePCOMP-- > "PROGRAM_COMPLETED" - + // switch su EXE mode... string exeMode = ""; if (STRB_DW2.HasFlag(StFlag32.B09)) diff --git a/MTC_Adapter/MTC_Adapter/AdapterOsai.cs b/MTC_Adapter/MTC_Adapter/AdapterOsai.cs index aeec240..50013a9 100644 --- a/MTC_Adapter/MTC_Adapter/AdapterOsai.cs +++ b/MTC_Adapter/MTC_Adapter/AdapterOsai.cs @@ -817,9 +817,6 @@ namespace MTC_Adapter /// public override void processStatus() { - - // rifare con bit-shift... - // https://www.dotnetperls.com/shift // update status da DW2/ DW3 // EMstop: verifico BIT e di conseguenza imposto @@ -832,94 +829,8 @@ namespace MTC_Adapter mEStop.Value = "ARMED"; } - // HARD CODE: forzo path 1 (indice 0...) - int idxPath = 0; - - // DEFINIZIONI MODI.... - //ModoAUTO-- > "AUTOMATIC" - //ModoEDIT-- > "EDIT" - //ModoMDI-- > "MANUAL_DATA_INPUT" - //ModoMAN-- > "MANUAL" - //ModoSEMI-- > "SEMI_AUTO" - //EsecuzioneRUN-- > "ACTIVE" - //EsecuzioneREADY-- > "READY" - //EsecuzioneSTOP-- > "STOPPED" - //EsecuzioneFEEDHOLD-- > "FEED_HOLD" - //EsecuzioneOSTOP-- > "OPTIONAL_STOP" - //EsecuzionePSTOP-- > "PROGRAM_STOPPED" - //EsecuzionePCOMP-- > "PROGRAM_COMPLETED" - - // switch su run mode... - if (STRB_DW2.HasFlag(StFlag32.B01)) - { - vettPath[idxPath].mPathRunMode.Value = "AUTOMATIC"; - } - else if (STRB_DW2.HasFlag(StFlag32.B02)) - { - vettPath[idxPath].mPathRunMode.Value = "EDIT"; - } - else if (STRB_DW2.HasFlag(StFlag32.B03)) - { - vettPath[idxPath].mPathRunMode.Value = "MANUAL_DATA_INPUT"; - } - else if (STRB_DW2.HasFlag(StFlag32.B04)) - { - vettPath[idxPath].mPathRunMode.Value = "MANUAL"; - } - else if (STRB_DW2.HasFlag(StFlag32.B05)) - { - vettPath[idxPath].mPathRunMode.Value = "MANUAL"; // "JOG"; - } - else if (STRB_DW2.HasFlag(StFlag32.B06)) - { - vettPath[idxPath].mPathRunMode.Value = "MANUAL"; //"JOGINC"; - } - else if (STRB_DW2.HasFlag(StFlag32.B07)) - { - vettPath[idxPath].mPathRunMode.Value = "MANUAL"; //"HANDLE"; - } - - // switch su EXE mode... - string exeMode = ""; - if (STRB_DW2.HasFlag(StFlag32.B08)) - { - exeMode = "ACTIVE"; - } - else if (STRB_DW2.HasFlag(StFlag32.B09)) - { - exeMode = "READY"; - } - else if (STRB_DW2.HasFlag(StFlag32.B10)) - { - exeMode = "STOPPED"; // "HOLD"; - } - else if (STRB_DW2.HasFlag(StFlag32.B11)) - { - exeMode = "FEED_HOLD"; // "FEEDHOLD"; - } - //// appunto: modi da creare - //INTERRUPTED(da creare) - //OPTIONAL_STOP(da creare) - //PROGRAM_STOPPED(da creare) - //PROGRAM_COMPLETED(da creare) - - if (vettPath[idxPath].mPathExeMode.Value.ToString() != exeMode) - { - vettPath[idxPath].mPathExeMode.Value = exeMode; - } - - // verifico tipo path... - if (STRB_DW2.HasFlag(StFlag32.B12)) - { - vettPath[idxPath].mPathType.Value = "LAVORO"; - } - else - { - vettPath[idxPath].mPathType.Value = "ASSERV"; - } - // verifico POWER ON... - if (STRB_DW2.HasFlag(StFlag32.B13)) + if (STRB_DW2.HasFlag(StFlag32.B01)) { mPower.Value = "ON"; } @@ -928,23 +839,101 @@ namespace MTC_Adapter mPower.Value = "OFF"; } - // processo eventuali altri bit status non noti... - string UnkStatus = ""; - // cerco i bit alzati --> aggiungo in stringa! - for (int i = 14; i < 32; i++) + // Processo selezionato 0=P1, 1=P2 + if (STRB_DW2.HasFlag(StFlag32.B02)) { - // converto! e aggiungo allarmi sollevati al corretto controller allarmi... - if (STRB_DW2.HasFlag((StFlag32)Math.Pow(2, i))) - { - UnkStatus += string.Format(" [STATUS_{0:00}] ", i); - } + mPower.Value = "P2"; + } + else + { + mPower.Value = "P1"; + } + + // processo ora i dai dei path... di sicuro il primo + procPath01_Status(); + //...e se c'รจ pure il secondo... + if (currAdpConf.nPath > 1) + { + // anche il secondo! + procPath02_Status(); + } + + } + /// + /// Processa status del path 01... + /// + private void procPath01_Status() + { + // HARD CODE: forzo path 1 (indice 0...) x iniziare... + int idxPath = 0; + string pathType = ""; + // verifico tipo processo path... + if (STRB_DW2.HasFlag(StFlag32.B03)) + { + vettPath[idxPath].mPathType.Value = "LAVORO"; + } + else + { + vettPath[idxPath].mPathType.Value = "ASSERV"; + } + + // switch su RUN mode... + string runMode = ""; + if (STRB_DW2.HasFlag(StFlag32.B04)) + { + runMode = "AUTOMATIC"; + } + else if (STRB_DW2.HasFlag(StFlag32.B05)) + { + runMode = "EDIT"; + } + else if (STRB_DW2.HasFlag(StFlag32.B06)) + { + runMode = "MANUAL_DATA_INPUT"; + } + else if (STRB_DW2.HasFlag(StFlag32.B07)) + { + runMode = "MANUAL"; + } + else if (STRB_DW2.HasFlag(StFlag32.B08)) + { + runMode = "SEMI_AUTO"; + } + + // switch su EXE mode... + string exeMode = ""; + if (STRB_DW2.HasFlag(StFlag32.B09)) + { + exeMode = "ACTIVE"; + } + else if (STRB_DW2.HasFlag(StFlag32.B10)) + { + exeMode = "READY"; + } + else if (STRB_DW2.HasFlag(StFlag32.B11)) + { + exeMode = "STOPPED"; + } + else if (STRB_DW2.HasFlag(StFlag32.B12)) + { + exeMode = "FEED_HOLD"; + } + else if (STRB_DW2.HasFlag(StFlag32.B13)) + { + exeMode = "OPTIONAL_STOP"; + } + else if (STRB_DW2.HasFlag(StFlag32.B14)) + { + exeMode = "PROGRAM_STOPPED"; + } + else if (STRB_DW2.HasFlag(StFlag32.B15)) + { + exeMode = "PROGRAM_COMPLETED"; } - // invio comunque... - mUnkStatus.Value = UnkStatus.Trim(); // inizializzo SEMPRE a vuoto... string SubMode = ""; - // verifico sulla STRB_DW3 i submode che POTREBBERO essere tutti sovrapposti... + // verifico sulla STRB_DW3 i submode che POTREBBERO tutti sovrapposti... if (STRB_DW3 != StFlag32.NONE) { // cerco i bit alzati --> aggiungo relativo submode! @@ -953,16 +942,134 @@ namespace MTC_Adapter // converto! e aggiungo allarmi sollevati al corretto controller allarmi... if (STRB_DW3.HasFlag((StFlag32)Math.Pow(2, i))) { - SubMode += string.Format(" [{0}]", elencoSubMode[i.ToString()]); + SubMode += string.Format(" [P01_{0}]", elencoSubMode[i.ToString()]); } } - } - // 2017.01.16 INVIO SOLO SE CAMBIA:.. - if (vettPath[idxPath].mPathSubMode.Value.ToString() != SubMode.Trim()) + + // salvo in blocco le info ricostruite x path! + savePathData(idxPath, pathType, runMode, exeMode, SubMode.Trim()); + } + /// + /// Processa status del path 02... + /// + private void procPath02_Status() + { + // HARD CODE: forzo path 2 (indice 1)... + int idxPath = 1; + string pathType = ""; + // verifico tipo processo path... + if (STRB_DW2.HasFlag(StFlag32.B03)) { - // INVIO SEMPRE (x prendere il reset/fronte discesa)... - vettPath[idxPath].mPathSubMode.Value = SubMode.Trim(); + vettPath[idxPath].mPathType.Value = "LAVORO"; + } + else + { + vettPath[idxPath].mPathType.Value = "ASSERV"; + } + + // switch su RUN mode... + string runMode = ""; + if (STRB_DW2.HasFlag(StFlag32.B04)) + { + runMode = "AUTOMATIC"; + } + else if (STRB_DW2.HasFlag(StFlag32.B05)) + { + runMode = "EDIT"; + } + else if (STRB_DW2.HasFlag(StFlag32.B06)) + { + runMode = "MANUAL_DATA_INPUT"; + } + else if (STRB_DW2.HasFlag(StFlag32.B07)) + { + runMode = "MANUAL"; + } + else if (STRB_DW2.HasFlag(StFlag32.B08)) + { + runMode = "SEMI_AUTO"; + } + + // switch su EXE mode... + string exeMode = ""; + if (STRB_DW2.HasFlag(StFlag32.B09)) + { + exeMode = "ACTIVE"; + } + else if (STRB_DW2.HasFlag(StFlag32.B10)) + { + exeMode = "READY"; + } + else if (STRB_DW2.HasFlag(StFlag32.B11)) + { + exeMode = "STOPPED"; + } + else if (STRB_DW2.HasFlag(StFlag32.B12)) + { + exeMode = "FEED_HOLD"; + } + else if (STRB_DW2.HasFlag(StFlag32.B13)) + { + exeMode = "OPTIONAL_STOP"; + } + else if (STRB_DW2.HasFlag(StFlag32.B14)) + { + exeMode = "PROGRAM_STOPPED"; + } + else if (STRB_DW2.HasFlag(StFlag32.B15)) + { + exeMode = "PROGRAM_COMPLETED"; + } + + // inizializzo SEMPRE a vuoto... + string SubMode = ""; + // verifico sulla STRB_DW3 i submode che POTREBBERO tutti sovrapposti... + if (STRB_DW3 != StFlag32.NONE) + { + // cerco i bit alzati --> aggiungo relativo submode! + for (int i = 0; i < 32; i++) + { + // converto! e aggiungo allarmi sollevati al corretto controller allarmi... + if (STRB_DW3.HasFlag((StFlag32)Math.Pow(2, i))) + { + SubMode += string.Format(" [P01_{0}]", elencoSubMode[i.ToString()]); + } + } + } + + // salvo in blocco le info ricostruite x path! + savePathData(idxPath, pathType, runMode, exeMode, SubMode.Trim()); + } + /// + /// Salva i valori per il path indicato SE variati... + /// + /// + /// + /// + /// + /// + protected void savePathData(int idxPath, string pathType, string pathRunMode, string pathExeMode, string pathSubMode) + { + // salvo type + if (vettPath[idxPath].mPathType.Value.ToString() != pathType) + { + vettPath[idxPath].mPathType.Value = pathType; + } + // salvo RUN mode + if (vettPath[idxPath].mPathRunMode.Value.ToString() != pathRunMode) + { + vettPath[idxPath].mPathRunMode.Value = pathRunMode; + } + // salvo EXE mode + if (vettPath[idxPath].mPathExeMode.Value.ToString() != pathExeMode) + { + vettPath[idxPath].mPathExeMode.Value = pathExeMode; + } + // salvo i submode.. + if (vettPath[idxPath].mPathSubMode.Value.ToString() != pathSubMode) + { + vettPath[idxPath].mPathSubMode.Value = pathSubMode; } } diff --git a/MTC_Adapter/MTC_Adapter/Resources/CMS/Appunti CMS OSAI.txt b/MTC_Adapter/MTC_Adapter/Resources/CMS/Appunti CMS OSAI.txt index b1e5307..bb48fff 100644 --- a/MTC_Adapter/MTC_Adapter/Resources/CMS/Appunti CMS OSAI.txt +++ b/MTC_Adapter/MTC_Adapter/Resources/CMS/Appunti CMS OSAI.txt @@ -10,3 +10,8 @@ help: --> c:\program filesOSAI\WinNBI\UserLibrary\Document\* 01) + +...bit-shift?!? +https://www.dotnetperls.com/shift + +