diff --git a/MTC_Adapter/MTC_Adapter/AdapterSiemens.cs b/MTC_Adapter/MTC_Adapter/AdapterSiemens.cs index 8143e19..0d71e97 100644 --- a/MTC_Adapter/MTC_Adapter/AdapterSiemens.cs +++ b/MTC_Adapter/MTC_Adapter/AdapterSiemens.cs @@ -18,12 +18,20 @@ namespace MTC_Adapter /// Area di memoria "Top" che contiene le informazioni principali x adpter (da scompattare), dato overhead lettura la leggiamo sempre tutta poi alla bisogna processamento... /// public byte[] MemBlockTop = new byte[284]; + /// + /// Vettore posizione assi (MAX 16...) + /// + public uint[] axisPosData = new uint[16]; /// /// Area di memoria base x MTConnect con SIEMENS (DB1499) /// protected int baseMemDb = 1499; /// + /// Area di memoria base x dati ASSI (241) + /// + protected int baseMemAx = 241; + /// /// Area di memoria base x dati UTENSILE (DB253) /// protected int baseMemUT = 253; @@ -951,19 +959,6 @@ namespace MTC_Adapter { // mostro assi in DataMonitor...... StringBuilder sb = new StringBuilder(); - -#if false - inizio = DateTime.Now; - CMSCncLib.Focas1.ODBPOS posAssi = SIEMENS_ref.getAllAxisPos(); - if (utils.CRB("recTime")) TimingData.addResult("R-AXIS_POS", DateTime.Now.Subtract(inizio).Ticks); - - inizio = DateTime.Now; - CMSCncLib.Focas1.ODBSVLOAD loadAssi = SIEMENS_ref.getAllAxisLoad(); - if (utils.CRB("recTime")) TimingData.addResult("R-AXIS_LOAD", DateTime.Now.Subtract(inizio).Ticks); - - CMSCncLib.Focas1.LOADELM valLoad = new CMSCncLib.Focas1.LOADELM(); - CMSCncLib.Focas1.POSELMALL valPos = new CMSCncLib.Focas1.POSELMALL(); - // nuova posizione (per calcoli) double newPos = 0; double distPerc = 0; @@ -971,155 +966,34 @@ namespace MTC_Adapter string tipoAsse = ""; string direzione = ""; + // leggo le posizioni SINO ai 16 assi permessi... + + int memIndex = 0; + // leggo TUTTI i primi 284 byte... + inizio = DateTime.Now; + SIEMENSMemRW_DWord(R, baseMemAx, memIndex, ref axisPosData); + if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-AXIS_POS", MemBlockTop.Length), DateTime.Now.Subtract(inizio).Ticks); + for (int i = 0; i < currAdpConf.nAxis; i++) { // per sicurezza try-catch try { - // in base a indice scelgo valore posizione e load - switch (i) - { - case 0: - valPos = posAssi.p1; - valLoad = loadAssi.svload1; - break; - case 1: - valPos = posAssi.p2; - valLoad = loadAssi.svload2; - break; - case 2: - valPos = posAssi.p3; - valLoad = loadAssi.svload3; - break; - case 3: - valPos = posAssi.p4; - valLoad = loadAssi.svload4; - break; - case 4: - valPos = posAssi.p5; - valLoad = loadAssi.svload5; - break; - case 5: - valPos = posAssi.p6; - valLoad = loadAssi.svload6; - break; - case 6: - valPos = posAssi.p7; - valLoad = loadAssi.svload7; - break; - case 7: - valPos = posAssi.p8; - valLoad = loadAssi.svload8; - break; - case 8: - valPos = posAssi.p9; - valLoad = loadAssi.svload9; - break; - case 9: - valPos = posAssi.p10; - valLoad = loadAssi.svload10; - break; - case 10: - valPos = posAssi.p11; - valLoad = loadAssi.svload11; - break; - case 11: - valPos = posAssi.p12; - valLoad = loadAssi.svload12; - break; - case 12: - valPos = posAssi.p13; - valLoad = loadAssi.svload13; - break; - case 13: - valPos = posAssi.p14; - valLoad = loadAssi.svload14; - break; - case 14: - valPos = posAssi.p15; - valLoad = loadAssi.svload15; - break; - case 15: - valPos = posAssi.p16; - valLoad = loadAssi.svload16; - break; - case 16: - valPos = posAssi.p17; - valLoad = loadAssi.svload17; - break; - case 17: - valPos = posAssi.p18; - valLoad = loadAssi.svload18; - break; - case 18: - valPos = posAssi.p19; - valLoad = loadAssi.svload19; - break; - case 19: - valPos = posAssi.p20; - valLoad = loadAssi.svload20; - break; - case 20: - valPos = posAssi.p21; - valLoad = loadAssi.svload21; - break; - case 21: - valPos = posAssi.p22; - valLoad = loadAssi.svload22; - break; - case 22: - valPos = posAssi.p23; - valLoad = loadAssi.svload23; - break; - case 23: - valPos = posAssi.p24; - valLoad = loadAssi.svload24; - break; - case 24: - valPos = posAssi.p25; - valLoad = loadAssi.svload25; - break; - case 25: - valPos = posAssi.p26; - valLoad = loadAssi.svload26; - break; - case 26: - valPos = posAssi.p27; - valLoad = loadAssi.svload27; - break; - case 27: - valPos = posAssi.p28; - valLoad = loadAssi.svload28; - break; - case 28: - valPos = posAssi.p29; - valLoad = loadAssi.svload29; - break; - case 29: - valPos = posAssi.p30; - valLoad = loadAssi.svload30; - break; - case 30: - valPos = posAssi.p31; - valLoad = loadAssi.svload31; - break; - case 31: - valPos = posAssi.p32; - valLoad = loadAssi.svload32; - break; - default: - // 2017.03.01 suggerimento Fabio: in CMS_SIEMENS in advanced compiler options mettere FS30D=1,SIEMENS=1 x leggere + assi?!? - valPos = posAssi.p1; - valLoad = loadAssi.svload1; - break; - } + // popolo valori... ipotesi CENTESIMI di mm... + newPos = axisPosData[i] / 100; - // popolo valori... + // manca LOAD assi +#if false vettAxis[i].mAxLoad.Value = (double)(valLoad.data) / Math.Pow(10, valLoad.dec); - newPos = (double)(valPos.abs.data) / Math.Pow(10, valPos.abs.dec); + newPos = (double)(valPos.abs.data) / Math.Pow(10, valPos.abs.dec); +#endif vettAxis[i].mAxPosAct.Value = newPos; + + // manca pos TGT... +#if false vettAxis[i].mAxPosTgt.Value = newPos + (double)(valPos.dist.data) / Math.Pow(10, valPos.dist.dec); +#endif vettAxis[i].mAxFeedAct.Value = FeedRate; // calcolo distanza e salvo valore... @@ -1152,7 +1026,8 @@ namespace MTC_Adapter if (utils.CRB("verbose")) { - sb.AppendLine(string.Format("Asse {0}: PosAct:{1:N3}, ToGo:{2:N3}{3} | {4}", valPos.abs.name, (double)(valPos.abs.data) / Math.Pow(10, valPos.abs.dec), valPos.dist.name, (double)(valPos.dist.data) / Math.Pow(10, valPos.dist.dec), direzione)); + sb.AppendLine(string.Format("Asse {0}: PosAct:{1:N3}, ToGo:{2:N3}{3} | {4}", i, newPos, 0, "-", direzione)); + //sb.AppendLine(string.Format("Asse {0}: PosAct:{1:N3}, ToGo:{2:N3}{3} | {4}", valPos.abs.name, (double)(valPos.abs.data) / Math.Pow(10, valPos.abs.dec), valPos.dist.name, (double)(valPos.dist.data) / Math.Pow(10, valPos.dist.dec), direzione)); } // salvo valori vettore prec... @@ -1165,6 +1040,9 @@ namespace MTC_Adapter vettAxis[i].mAxFeedOver.Value = FeedRateOver; //vettAxis[i].mAxAccelAct.Value = AxData.AxisAccel; //vettAxis[i].mAxBattery.Value = AxData.AxisBattery; + + + } catch { @@ -1172,6 +1050,10 @@ namespace MTC_Adapter } } +#if false + inizio = DateTime.Now; + CMSCncLib.Focas1.ODBSVLOAD loadAssi = SIEMENS_ref.getAllAxisLoad(); + if (utils.CRB("recTime")) TimingData.addResult("R-AXIS_LOAD", DateTime.Now.Subtract(inizio).Ticks); #endif parentForm.dataMonitor_3 += sb.ToString(); }