modifica principale in tryConnect x verifica SE sia running adp prima di procedere con check allarmi... + modifiche minori x visualizzazione

This commit is contained in:
Samuele E. Locatelli
2017-04-28 11:22:05 +02:00
parent 977f963f75
commit 6d7da08f6e
+94 -339
View File
@@ -10,7 +10,9 @@ namespace MTC_Adapter
{
public class AdapterFanuc : AdapterGeneric
{
// vettore valori in file interscambio
/// <summary>
/// vettore valori in file interscambio
/// </summary>
public Dictionary<string, string> generalStatus;
/// <summary>
/// Contenuto valori maintenance data da PLC
@@ -27,7 +29,7 @@ namespace MTC_Adapter
protected FANUC FANUC_ref;
/// <summary>
/// wrapper chiamata lettura/scrittura fanuc...
/// wrapper chiamata lettura/scrittura SINGOLO BYTE...
/// </summary>
/// <param name="bWrite"></param>
/// <param name="MemType"></param>
@@ -49,7 +51,7 @@ namespace MTC_Adapter
return answ;
}
/// <summary>
/// wrapper chiamata lettura/scrittura fanuc...
/// wrapper chiamata lettura/scrittura MULTI BYTE...
/// </summary>
/// <param name="bWrite"></param>
/// <param name="MemType"></param>
@@ -106,7 +108,9 @@ namespace MTC_Adapter
tryConnect();
lg.Info("End init Adapter FANUC");
}
/// <summary>
/// Override disconnessione
/// </summary>
public override void tryDisconnect()
{
if (connectionOk)
@@ -129,7 +133,9 @@ namespace MTC_Adapter
lg.Error("IMPOSSIBILE effettuare disconnessione: Connessione non disponibile...");
}
}
/// <summary>
/// Override connessione
/// </summary>
public override void tryConnect()
{
if (!connectionOk)
@@ -138,17 +144,22 @@ namespace MTC_Adapter
try
{
FANUC_ref.Connect(ref szStatusConnection);
lg.Info(szStatusConnection);
lg.Info("szStatusConnection: " + szStatusConnection);
connectionOk = true;
// refresh stato allarmi!!!
if (connectionOk)
{
// carico status allarmi (completo)
lg.Info("Inizio refresh completo stato allarmi...");
forceAlarmCheck();
lg.Info("Completato refresh completo stato allarmi!");
if (adpRunning)
{
// carico status allarmi (completo)
lg.Info("Inizio refresh completo stato allarmi...");
forceAlarmCheck();
lg.Info("Completato refresh completo stato allarmi!");
}
else
{
lg.Info("Connessione OK");
}
}
else
{
@@ -165,7 +176,7 @@ namespace MTC_Adapter
}
/// <summary>
/// Verifico connessione fanuc...
/// Verifico connessione FANUC...
/// </summary>
/// <returns></returns>
public override bool connectionOk
@@ -200,7 +211,6 @@ namespace MTC_Adapter
lg.Error("Errore connessione mancante in getStrobeAndAckStatus");
}
}
/// <summary>
/// processing strobe!
/// </summary>
@@ -208,6 +218,10 @@ namespace MTC_Adapter
{
base.processStrobe();
// inizializzo userAction
string UserAction = "";
string TestingData = "";
string UnkStrobe = "";
// !!!FARE!!! multipath...
// verifico i vari strobe x recuperare i dati... PER ORA SOLO DW1 per path1 (indice 0)...
int idxPath = 0;
@@ -216,10 +230,6 @@ namespace MTC_Adapter
inizio = DateTime.Now;
// byte di acknowledge...
byte[] retACK_DW1 = new byte[4];
// inizializzo userAction
string UserAction = "";
string TestingData = "";
string UnkStrobe = "";
try
{
// controllo TUTTI i flag: se ce ne sono di alzati DEVO processare...
@@ -370,7 +380,7 @@ namespace MTC_Adapter
memIndex = 10508;
inizio = DateTime.Now;
FanucMemRW(W, FANUC.MemType.R, memIndex, ref retACK_DW);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("W{0}-DW2", retACK_DW.Length), DateTime.Now.Subtract(inizio).Ticks);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("W{0}-WatchDog", retACK_DW.Length), DateTime.Now.Subtract(inizio).Ticks);
}
}
}
@@ -611,7 +621,7 @@ namespace MTC_Adapter
{
try
{
// aggiorno vettore allarmi x intero!
// aggiorno vettore allarmi x intero! size del vettore di destinazione (in byte!!!!)
Buffer.BlockCopy(MemBlock, 0, AlarmFlags, 0, MemBlock.Length);
}
catch (Exception exc)
@@ -684,7 +694,6 @@ namespace MTC_Adapter
}
}
}
/// <summary>
/// processing!
/// </summary>
@@ -848,7 +857,9 @@ namespace MTC_Adapter
{
base.getConfigParam();
}
/// <summary>
/// Recupera dati a lenta variazione
/// </summary>
public override void getSlowChangingData()
{
base.getSlowChangingData();
@@ -858,14 +869,12 @@ namespace MTC_Adapter
// area gestione dati utensili... in base al num max di UnOp recupero i dati utensile... PROCEDURA AD HOC!!!
getDatiUt(currAdpConf.nUnOp);
}
/// <summary>
/// Gestione lettura dati manutenzione
/// </summary>
private void getMtzDataFromPlc()
{
bool needSave = false;
// recupero i dati di manutenzione dall'area di memoria IN BLOCCO
int memIndex = 14000;
byte[] tabDatiMtzByte = new byte[4 * maintData.Length];
@@ -879,208 +888,6 @@ namespace MTC_Adapter
processMaintData(tabDatiMtz, maintData);
// verifica se debba salvare e mostrare dati
checkSavePersDataLayer();
// vecchia gestione con shift & co, ora gestito come OSAI con metodo da AdapterGeneric...
#if false
// uno ad uno vado a inserirli nella mappa dei dati dell'adapter...
int shift = 4; // 32bit
int numero = 0;
uint valRead = 0;
for (int i = 0; i < maintData.Length; i++)
{
numero = 0;
valRead = 0;
// 2016.07.06 uso indice i * 4 x selezionare area memoria...
//shift = Convert.ToInt32(maintData[i].codNum) - 1;
if (maintData[i].varName == "ACC_TIME")
{
istOreMaccOn = BitConverter.ToUInt32(tabDatiMtzByte, shift * i);
}
else if (maintData[i].varName == "ACC_TIME_WORK")
{
istOreMaccLav = BitConverter.ToUInt32(tabDatiMtzByte, shift * i);
}
else if (maintData[i].varName.StartsWith("Path_"))
{
if (maintData[i].varName.EndsWith("_PZ_TOT"))
{
try
{
numero = Convert.ToInt32(maintData[i].varName.Replace("Path_", "").Replace("_PZ_TOT", ""));
}
catch
{
}
if (numero > 0)
{
vettPath[numero - 1].mPathPartCount.Value = BitConverter.ToUInt32(tabDatiMtzByte, shift * i);
}
}
}
else if (maintData[i].varName.StartsWith("Axis_"))
{
if (maintData[i].varName.EndsWith("_DistDone"))
{
try
{
numero = Convert.ToInt32(maintData[i].varName.Replace("Axis_", "").Replace("_DistDone", ""));
}
catch
{ }
if (numero > 0)
{
istDistMovAssi[numero - 1] = BitConverter.ToUInt32(tabDatiMtzByte, shift * i);
}
}
else if (maintData[i].varName.EndsWith("_Invers"))
{
try
{
numero = Convert.ToInt32(maintData[i].varName.Replace("Axis_", "").Replace("_Invers", ""));
}
catch
{ }
if (numero > 0)
{
// 2016.07.06 debug di valori che potrebbero essere nulli...
try
{
valRead = BitConverter.ToUInt32(tabDatiMtzByte, shift * i);
}
catch (Exception exc)
{
valRead = 0;
lg.Error(string.Format("Errore in recupero num inversioni:{0}parametro: {1}{0}shift: {2}{0}i: {3}{0}Exc: {4}", Environment.NewLine, maintData[i].varName, shift, i, exc));
}
istNumInvAssi[numero - 1] = valRead;
}
}
else if (maintData[i].varName.EndsWith("_AccTime"))
{
try
{
numero = Convert.ToInt32(maintData[i].varName.Replace("Axis_", "").Replace("_AccTime", ""));
}
catch
{ }
if (numero > 0)
{
// 2016.07.06 debug di valori che potrebbero essere nulli...
try
{
valRead = BitConverter.ToUInt32(tabDatiMtzByte, shift * i);
}
catch (Exception exc)
{
valRead = 0;
lg.Error(string.Format("Errore in recupero num inversioni:{0}parametro: {1}{0}shift: {2}{0}i: {3}{0}Exc: {4}", Environment.NewLine, maintData[i].varName, shift, i, exc));
}
istAccTimeAssi[numero - 1] = valRead;
}
}
}
else if (maintData[i].varName.StartsWith("UnOp_"))
{
if (maintData[i].varName.EndsWith("_AccTime"))
{
try
{
numero = Convert.ToInt32(maintData[i].varName.Replace("UnOp_", "").Replace("_AccTime", ""));
}
catch
{ }
if (numero > 0)
{
istGiriElettrom[numero - 1] = BitConverter.ToUInt32(tabDatiMtzByte, shift * i);
}
}
else if (maintData[i].varName.EndsWith("_NumCambiUT"))
{
try
{
numero = Convert.ToInt32(maintData[i].varName.Replace("UnOp_", "").Replace("_NumCambiUT", ""));
}
catch
{ }
if (numero > 0)
{
istNumCambiUt[numero - 1] = BitConverter.ToUInt32(tabDatiMtzByte, shift * i);
}
}
}
else if (maintData[i].varName.StartsWith("VacPump_"))
{
if (maintData[i].varName.EndsWith("_WrkTime"))
{
try
{
numero = Convert.ToInt32(maintData[i].varName.Replace("VacPump_", "").Replace("_WrkTime", ""));
}
catch
{ }
if (numero > 0)
{
istVacPumpWrkTime[numero - 1] = BitConverter.ToUInt32(tabDatiMtzByte, shift * i);
}
}
}
else if (maintData[i].varName.StartsWith("VacAct_"))
{
if (maintData[i].varName.EndsWith("_Count"))
{
try
{
numero = Convert.ToInt32(maintData[i].varName.Replace("VacAct_", "").Replace("_Count", ""));
}
catch
{ }
if (numero > 0)
{
istVacActCount[numero - 1] = BitConverter.ToUInt32(tabDatiMtzByte, shift * i);
}
}
}
else if (maintData[i].varName.StartsWith("Lubro_"))
{
if (maintData[i].varName.EndsWith("_Num"))
{
try
{
numero = Convert.ToInt32(maintData[i].varName.Replace("Lubro_", "").Replace("_Num", ""));
}
catch
{ }
if (numero > 0)
{
istLubroCount[numero - 1] = BitConverter.ToUInt32(tabDatiMtzByte, shift * i);
}
}
}
}
if (persistenceLayer != null)
{
// verifica se si debba aggiornare XML (e salva in adapter dati vari)
needSave = procOreMaccOn(needSave);
needSave = procOreMaccLav(needSave);
needSave = procProgrName(needSave);
needSave = procPartId(needSave);
needSave = procPzProd(needSave);
needSave = procGiriTotUnOp(needSave);
needSave = procNumCU(needSave);
needSave = procMovTotAssi(needSave);
needSave = procAccTimeAssi(needSave);
needSave = procNumInvAssi(needSave);
needSave = procVacPump(needSave);
needSave = procVacAct(needSave);
needSave = procLubro(needSave);
// salvo se necessario!
if (needSave) parentForm.persistData();
// -------------------------------------------
}
#endif
}
/// <summary>
@@ -1098,90 +905,6 @@ namespace MTC_Adapter
// decodifico aree memoria secondo tab configurazione
processStatusData(tabDatiStatus, statusData);
// vecchia gestione, ora gestito come OSAI con metodo da AdapterGeneric...
#if false
int bitNum = 0;
int byteNum = 0;
byte byteVal;
// uno ad uno vado a inserirli nella mappa dei dati dell'adapter...
int numero = 0;
string status = "";
for (int i = 0; i < statusData.Length; i++)
{
numero = 0;
status = "";
// calcolo quale byte e quale bit devo leggere..
byteNum = i / 8;
bitNum = i - (8 * byteNum); // indice zero dei bit nel byte ( da cui -1 )
// faccio vera lettura
byteVal = tabDatiStatus[byteNum];
// leggo bit come ACTIVE/INACTIVE
if (((StFlag8)byteVal).HasFlag((StFlag8)Math.Pow(2, bitNum)))
{
status = "ACTIVE";
}
else
{
status = "INACTIVE";
}
if (statusData[i].varName == "PROTECTION_STATUS")
{
mProtectionStatus.Value = status;
}
else if (statusData[i].varName.StartsWith("VacPump_"))
{
if (statusData[i].varName.EndsWith("_Status"))
{
try
{
numero = Convert.ToInt32(statusData[i].varName.Replace("VacPump_", "").Replace("_Status", ""));
}
catch
{
}
if (numero > 0)
{
vettVacPump[numero - 1].mVacPumpStatus.Value = status;
}
}
}
else if (statusData[i].varName.StartsWith("Cooler_"))
{
if (statusData[i].varName.EndsWith("_Status"))
{
try
{
numero = Convert.ToInt32(statusData[i].varName.Replace("Cooler_", "").Replace("_Status", ""));
}
catch
{ }
if (numero > 0)
{
vettCooler[numero - 1].mCoolStatus.Value = status;
}
}
}
else if (statusData[i].varName.StartsWith("UnOp_"))
{
if (statusData[i].varName.EndsWith("_Status"))
{
try
{
numero = Convert.ToInt32(statusData[i].varName.Replace("UnOp_", "").Replace("_Status", ""));
}
catch
{ }
if (numero > 0)
{
vettUnOp[numero - 1].mUnOpStatus.Value = status;
}
}
}
}
#endif
}
/// <summary>
/// Leggo dati globali comuni (x path, assi...)
@@ -1189,9 +912,17 @@ namespace MTC_Adapter
public override void getGlobalData()
{
base.getGlobalData();
// svuoto...
parentForm.dataMonitor_1 = "";
parentForm.dataMonitor_2 = "";
parentForm.dataMonitor_3 = "";
// accodo dati path in DataMonitor......
StringBuilder sb = new StringBuilder();
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
// dati base...
sb1.AppendLine(string.Format("POWER {0}: | EmStop:{1:N3} | ProcSel: {2}", mPower.Value, mEStop.Value, mProcSel.Value));
// leggo dati globali...
inizio = DateTime.Now;
@@ -1212,15 +943,15 @@ namespace MTC_Adapter
RapidOver = PathData_mem[2];
SpeedRateOver = PathData_mem[3];
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));
sb1.AppendLine(string.Format("FeedRate: {0} mm/min", FeedRate));
sb1.AppendLine(string.Format("FeedRateOver: {0} %", FeedRateOver));
sb1.AppendLine(string.Format("RapidOver: {0} %", RapidOver));
sb1.AppendLine(string.Format("SpeedRateOver: {0} %", SpeedRateOver));
// se ho allarmi li accodo...
if (allDynData.alarm != 0)
{
sb.AppendLine(string.Format("Allarmi CNC: {0}", allDynData.alarm));
sb1.AppendLine(string.Format("Allarmi CNC: {0}", allDynData.alarm));
inizio = DateTime.Now;
allarmiCNC = FANUC_ref.getCncAlarm();
@@ -1232,7 +963,14 @@ namespace MTC_Adapter
allarmiCNC = new CMSCncLib.Focas1.ODBALMMSG2();
}
parentForm.dataMonitor_1 = sb.ToString();
// accodo dati base!
parentForm.dataMonitor_1 = sb1.ToString();
// accodo dati UT...
for (int i = 0; i < currAdpConf.nUnOp; i++)
{
sb2.AppendLine(string.Format("UT: ToolId {0} | VitaRes {1} | TipoVita {2} ", vettUnOp[i].mUnOpToolId.Value, vettUnOp[i].mUnOpVitaRes.Value, vettUnOp[i].mUnOpVitaResType.Value));
}
parentForm.dataMonitor_2 = sb2.ToString();
// gestisco lettura dati manutenzione da PLC...
getMtzDataFromPlc();
@@ -1305,7 +1043,6 @@ namespace MTC_Adapter
// SE non è un commento...
if (linea.Substring(0, 1) != "#")
{
//elencoAllarmi[rumRiga] = decodeAlarmLine(linea, ':');
statusData[numRiga] = decodeBitData(linea, utils.CRC("testCharSep"), "R", 14512, 1, numRiga);
numRiga++;
}
@@ -1317,15 +1054,16 @@ namespace MTC_Adapter
if (utils.CRB("verbose")) lg.Info(string.Format("Fine caricamento vettore di {0} variabili status gestite", numRiga));
}
/// <summary>
/// Processing allarmi CNC
/// </summary>
public override void processAlarm()
{
base.processAlarm();
// ggiungo gestione allarmi CNC
// aggiungo gestione allarmi CNC
checkCNCAlarms();
}
/// <summary>
/// Verifica i 10 allarmi CNC SE presenti
/// </summary>
@@ -1353,23 +1091,36 @@ namespace MTC_Adapter
// controllo valore...
if (allarme.alm_no > 0)
{
if (utils.CRI("loglevel") > 5)
try
{
lg.Info(string.Format("Allarmi CNC: NUM {0} | MESS: {1} | ASSE: {2} | TYPE: {3}", allarme.alm_no, allarme.alm_msg, allarme.axis, allarme.type));
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));
}
// 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, "", "");
}
else
{
vettAxis[allarme.axis - 1].mAxAlarmCNC.Add(MTConnect.Condition.Level.FAULT, allarme.alm_msg, codAllarme, "", "");
}
// mostro in form!
sb.AppendLine(codAllarme);
parentForm.dataMonitor_1 += sb.ToString();
}
// 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)
catch (Exception exc)
{
mAlarmCNC.Add(MTConnect.Condition.Level.FAULT, allarme.alm_msg, codAllarme, "", "");
}
else
{
vettAxis[allarme.axis - 1].mAxAlarmCNC.Add(MTConnect.Condition.Level.FAULT, allarme.alm_msg, codAllarme, "", "");
lg.Error(string.Format("{0}", exc));
}
}
}
/// <summary>
/// Recupero dati x UnOp
/// </summary>
public override void getUnOp()
{
base.getUnOp();
@@ -1546,11 +1297,14 @@ namespace MTC_Adapter
CMSCncLib.Focas1.ODB5AXMAN vettTTCoord = FANUC_ref.getPathTTCoord();
if (utils.CRB("recTime")) TimingData.addResult("R-TTCoord", DateTime.Now.Subtract(inizio).Ticks);
// cicl su path
// ciclo su path
StringBuilder sb_2;
StringBuilder sb_3;
for (int i = 0; i < currAdpConf.nPath; i++)
{
// accodo dati path in DataMonitor......
StringBuilder sb = new StringBuilder();
// accodo dati path in DataMonitor...
sb_2 = new StringBuilder();
sb_3 = new StringBuilder();
vettPath[i].mPathCodG_Act.Value = GCodAttivi;
@@ -1565,7 +1319,8 @@ namespace MTC_Adapter
vettPath[i].mPathCurrProgRowNum.Value = "";
vettPath[i].mPathActiveAxes.Value = "";
sb.AppendLine(string.Format("Path {0}, PROG: {1}", i + 1, vettPath[i].mPathCurrProg.Value));
sb_2.AppendLine(string.Format("Path {0}, PROG: {1}", i + 1, vettPath[i].mPathCurrProg.Value));
sb_3.AppendLine(string.Format("Path {0}, GCodes: {1}", i + 1, GCodAttivi));
sb.AppendLine(string.Format("Path {0}, Asse 1: {1:N3}", i + 1, ((decimal)vettTTCoord.data1) / utils.CRI("fattdecimale")));
sb.AppendLine(string.Format("Path {0}, Asse 2: {1:N3}", i + 1, ((decimal)vettTTCoord.data2) / utils.CRI("fattdecimale")));
@@ -1573,7 +1328,8 @@ namespace MTC_Adapter
sb.AppendLine(string.Format("Path {0}, Cent 1: {1:N3}", i + 1, ((decimal)vettTTCoord.c1) / utils.CRI("fattdecimale")));
sb.AppendLine(string.Format("Path {0}, Cent 2: {1:N3}", i + 1, ((decimal)vettTTCoord.c2) / utils.CRI("fattdecimale")));
parentForm.dataMonitor_1 += sb.ToString();
parentForm.dataMonitor_2 += sb_2.ToString();
parentForm.dataMonitor_3 += sb_3.ToString();
}
}
@@ -1782,7 +1538,6 @@ 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));
}
@@ -1803,7 +1558,7 @@ namespace MTC_Adapter
}
}
parentForm.dataMonitor_1 += sb.ToString();
parentForm.dataMonitor_3 += sb.ToString();
}
}
}