From 152f505c5ed2b8e48b5746fbc981fe4cc2a13ca7 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Thu, 20 Apr 2017 13:03:53 +0200 Subject: [PATCH] Gestione preliminare overrides x multipath --- MTC_Adapter/MTC_Adapter/AdapterGeneric.cs | 30 +++++++++ MTC_Adapter/MTC_Adapter/AdapterOsai.cs | 79 +++++++++++++++++------ 2 files changed, 89 insertions(+), 20 deletions(-) diff --git a/MTC_Adapter/MTC_Adapter/AdapterGeneric.cs b/MTC_Adapter/MTC_Adapter/AdapterGeneric.cs index a3ce550..e4931ae 100644 --- a/MTC_Adapter/MTC_Adapter/AdapterGeneric.cs +++ b/MTC_Adapter/MTC_Adapter/AdapterGeneric.cs @@ -251,6 +251,26 @@ namespace MTC_Adapter /// public Sample mPathRapidOver; /// + /// Override Jog + /// + public Sample mPathJogOver; + /// + /// Override Spindle_01 + /// + public Sample mPathSpindleOver_01; + /// + /// Override Spindle_02 + /// + public Sample mPathSpindleOver_02; + /// + /// Override Spindle_03 + /// + public Sample mPathSpindleOver_03; + /// + /// Override Spindle_04 + /// + public Sample mPathSpindleOver_04; + /// /// Posizione X /// public Sample mPathPosActX; @@ -302,6 +322,11 @@ namespace MTC_Adapter mPathFeed = new Sample(string.Format("{0}_FeedRate", ident)); mPathFeedOver = new Sample(string.Format("{0}_FeedOverr", ident)); mPathRapidOver = new Sample(string.Format("{0}_RapidOverr", ident)); + mPathJogOver = new Sample(string.Format("{0}_JogOverr", ident)); + mPathSpindleOver_01 = new Sample(string.Format("{0}_SpindleOver_01", ident)); + mPathSpindleOver_02 = new Sample(string.Format("{0}_SpindleOver_02", ident)); + mPathSpindleOver_03 = new Sample(string.Format("{0}_SpindleOver_03", ident)); + mPathSpindleOver_04 = new Sample(string.Format("{0}_SpindleOver_04", ident)); mPathPosActX = new Sample(string.Format("{0}_PosActX", ident)); mPathPosActY = new Sample(string.Format("{0}_PosActY", ident)); mPathPosActZ = new Sample(string.Format("{0}_PosActZ", ident)); @@ -1080,6 +1105,11 @@ namespace MTC_Adapter mAdapter.AddDataItem(vettPath[i].mPathFeed); mAdapter.AddDataItem(vettPath[i].mPathFeedOver); mAdapter.AddDataItem(vettPath[i].mPathRapidOver); + mAdapter.AddDataItem(vettPath[i].mPathJogOver); + mAdapter.AddDataItem(vettPath[i].mPathSpindleOver_01); + mAdapter.AddDataItem(vettPath[i].mPathSpindleOver_02); + mAdapter.AddDataItem(vettPath[i].mPathSpindleOver_03); + mAdapter.AddDataItem(vettPath[i].mPathSpindleOver_04); mAdapter.AddDataItem(vettPath[i].mPathPosActX); mAdapter.AddDataItem(vettPath[i].mPathPosActY); mAdapter.AddDataItem(vettPath[i].mPathPosActZ); diff --git a/MTC_Adapter/MTC_Adapter/AdapterOsai.cs b/MTC_Adapter/MTC_Adapter/AdapterOsai.cs index a03727b..0824743 100644 --- a/MTC_Adapter/MTC_Adapter/AdapterOsai.cs +++ b/MTC_Adapter/MTC_Adapter/AdapterOsai.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text; namespace MTC_Adapter { @@ -326,6 +327,8 @@ namespace MTC_Adapter { base.processStrobe(); + // reset dello SB parent... + // oggetti "accessori" x processing (1 byte di strobe x ogni path) StFlag8 currStrobe; StFlag8 currAck; @@ -870,7 +873,6 @@ namespace MTC_Adapter // anche il secondo! procPath02_Status(); } - } /// /// Processa status del path 01... @@ -1416,33 +1418,43 @@ namespace MTC_Adapter { base.getGlobalData(); -#if false // accodo dati path in DataMonitor...... StringBuilder sb = new StringBuilder(); + // dati base... + sb.AppendLine(string.Format("POWER {0}: | EmStop:{1:N3} | ProcSel: {2}", mPower.Value, mEStop.Value, mProcSel.Value)); + // leggo dati globali... inizio = DateTime.Now; - allDynData = OSAI_ref.getAllDynData(); +#if false + allDynData = OSAI_ref.getAllDynData(); if (utils.CRB("recTime")) TimingData.addResult("R-ALL-DYN-DATA", DateTime.Now.Subtract(inizio).Ticks); FeedRate = allDynData.actf; +#endif + FeedRate = -999; // !!!FARE!!! - int memIndex = 12000; - byte[] PathData = new byte[4]; + // area path1/2: 7 WORD x ogni path... + int memIndex = 19151; + ushort[] PathData_mem = new ushort[14]; inizio = DateTime.Now; - OsaiMemRW(R, FANUC.MemType.R, memIndex, ref PathData); - if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-PathData", PathData.Length), DateTime.Now.Subtract(inizio).Ticks); + OsaiMemRW_Word(R, OSAI.MemTypeWord.MW_CODE, memIndex, ref PathData_mem); + if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-PathData", PathData_mem.Length * 2), DateTime.Now.Subtract(inizio).Ticks); - // 2016.07.19 mod con Fabio - //JogRateOver = PathData[0]; - FeedRateOver = PathData[1]; - RapidOver = PathData[2]; - SpeedRateOver = PathData[3]; + // 2017.04.20: recupero OVER per Jog/Feed/Rapid/Spindle x i path multipli (qui cablati 1-2) + ushort[] currPathData = new ushort[7]; + // processo ora i dai dei path... di sicuro il primo + Array.Copy(PathData_mem, 0, currPathData, 0, 7); + procPathOverride(0, currPathData, ref sb); + //...e se c'รจ pure il secondo... + if (currAdpConf.nPath > 1) + { + Array.Copy(PathData_mem, 7, currPathData, 0, 7); + // anche il secondo! + procPathOverride(1, currPathData, ref sb); + } sb.AppendLine(string.Format("FeedRate: {0} mm/min", FeedRate)); - sb.AppendLine(string.Format("FeedRateOver: {0} %", FeedRateOver)); - sb.AppendLine(string.Format("RapidOver: {0} %", RapidOver)); - sb.AppendLine(string.Format("SpeedRateOver: {0} %", SpeedRateOver)); // se ho allarmi li accodo... if (allDynData.alarm != 0) @@ -1450,7 +1462,9 @@ namespace MTC_Adapter sb.AppendLine(string.Format("Allarmi CNC: {0}", allDynData.alarm)); inizio = DateTime.Now; - allarmiCNC = OSAI_ref.getCncAlarm(); +#if false + allarmiCNC = OSAI_ref.getCncAlarm(); +#endif if (utils.CRB("recTime")) TimingData.addResult("R-CNC-ALARMS", DateTime.Now.Subtract(inizio).Ticks); checkCNCAlarms(); } @@ -1465,9 +1479,32 @@ namespace MTC_Adapter getMtzDataFromPlc(); // gestisco lettura dati status da PLC... - getStatusDataFromPlc(); -#endif + getStatusDataFromPlc(); } + /// + /// Processa i dati di override di un path + /// + /// idx path (zero based) + /// vettore 7 valori dei dati (valori int16 jog/feed/rapid/spindle[1..4]) + /// StringBuilder da aggiornare + private void procPathOverride(int currIdx, ushort[] dataVector, ref StringBuilder sb) + { + // prendo quella GLOBALE... + vettPath[currIdx].mPathFeed.Value = FeedRate; + // leggo da vettore... CABLATO DIVISO PER 100!!! + vettPath[currIdx].mPathJogOver.Value = dataVector[0] / 100; + vettPath[currIdx].mPathFeedOver.Value = dataVector[1] / 100; + vettPath[currIdx].mPathRapidOver.Value = dataVector[2] / 100; + vettPath[currIdx].mPathSpindleOver_01.Value = dataVector[3] / 100; + vettPath[currIdx].mPathSpindleOver_02.Value = dataVector[4] / 100; + vettPath[currIdx].mPathSpindleOver_03.Value = dataVector[5] / 100; + vettPath[currIdx].mPathSpindleOver_04.Value = dataVector[6] / 100; + + // salvo stringa! + sb.AppendLine(string.Format("P{0} - Override % Jog|Feed|Rapid: {1}|{2}|{3}", currIdx + 1, dataVector[0] / 100, dataVector[1] / 100, dataVector[2] / 100)); + sb.AppendLine(string.Format("P{0} - Override % Spindle 1|2|3|4: {1}|{2}|{3}|{4}", currIdx + 1, dataVector[3] / 100, dataVector[4] / 100, dataVector[5] / 100, dataVector[6] / 100)); + } + /// /// Carico file conf dati CMS /// @@ -1795,7 +1832,9 @@ namespace MTC_Adapter public override void getPath() { - base.getPath(); + //NON richiamo metodo base... ma faccio override qui (e altrove...) + checkPath(); + #if false // recupero vettore generale G MODE @@ -1879,11 +1918,11 @@ namespace MTC_Adapter public override void getAxis() { -#if false // mostro assi in DataMonitor...... StringBuilder sb = new StringBuilder(); inizio = DateTime.Now; +#if false CMSCncLib.Focas1.ODBPOS posAssi = OSAI_ref.getAllAxisPos(); if (utils.CRB("recTime")) TimingData.addResult("R-AXIS_POS", DateTime.Now.Subtract(inizio).Ticks);