portato in AdapterGeneric metodi x gestione globalData (e implementato in OSAI/SIEMENS

This commit is contained in:
Samuele E. Locatelli
2017-05-22 15:20:49 +02:00
parent bcee91e8a0
commit 0f84f44b58
3 changed files with 447 additions and 253 deletions
+114
View File
@@ -2021,6 +2021,120 @@ namespace MTC_Adapter
/// </summary>
public virtual void getGlobalData()
{
// svuoto...
parentForm.dataMonitor_1 = "";
parentForm.dataMonitor_2 = "";
parentForm.dataMonitor_3 = "";
// accodo dati path in DataMonitor......
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...
readGlobalData();
// legge overrides...
readOverrides(ref sb1);
procCncAlarm();
// 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();
// gestisco lettura dati analogici da PLC...
getAnalogDataFromPlc();
// gestisco lettura dati status da PLC...
getStatusDataFromPlc();
}
/// <summary>
/// Legge dati globali...
/// </summary>
public virtual void readGlobalData()
{
}
/// <summary>
/// legge dati override...
/// </summary>
/// <param name="sb1"></param>
/// <returns></returns>
public virtual bool readOverrides(ref StringBuilder sb1)
{
bool fatto = false;
return fatto;
}
/// <summary>
/// processa allarmi CNC...
/// </summary>
public virtual bool procCncAlarm()
{
bool fatto = false;
return fatto;
}
/// <summary>
/// Gestione lettura dati manutenzione
/// </summary>
public virtual bool getMtzDataFromPlc()
{
bool fatto = false;
return fatto;
}
/// <summary>
/// Gestione lettura dati analogici
/// </summary>
public virtual bool getAnalogDataFromPlc()
{
bool fatto = false;
return fatto;
}
/// <summary>
/// Gestione lettura dati status da PLC
/// </summary>
public virtual bool getStatusDataFromPlc()
{
bool fatto = false;
return fatto;
}
/// <summary>
/// Processa i dati di override di un path
/// </summary>
/// <param name="currIdx">idx path (zero based)</param>
/// <param name="dataVector">vettore 7 valori dei dati (valori int16 jog/feed/rapid/spindle[1..4])</param>
/// <param name="sb">StringBuilder da aggiornare</param>
public bool procPathOverride(int currIdx, ushort[] dataVector, ref StringBuilder sb)
{
bool fatto = false;
try
{
// 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));
fatto = true;
}
catch
{ }
return fatto;
}
/// <summary>
+151 -137
View File
@@ -466,70 +466,14 @@ namespace MTC_Adapter
int memIndex = 19036;
return OsaiMemRW_DWord(R, OSAI.MemTypeWord.MW_CODE, memIndex + blockIndex * 2, ref MemBlock);
}
/// <summary>
/// Gestione lettura dati manutenzione
/// </summary>
private void getMtzDataFromPlc()
{
// recupero i dati di manutenzione dall'area di memoria IN BLOCCO
int memIndex = 1000;
uint[] tabDatiMtz = new uint[maintData.Length];
inizio = DateTime.Now;
OsaiMemRW_DWord(R, OSAI.MemTypeWord.GW_CODE, memIndex, ref tabDatiMtz);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiMtz", tabDatiMtz.Length * 4), DateTime.Now.Subtract(inizio).Ticks);
// decodifico aree memoria secondo tab configurazione
processMaintData(tabDatiMtz, maintData);
// verifica se debba salvare e mostrare dati
checkSavePersDataLayer();
}
/// <summary>
/// Gestione lettura dati analogici
/// </summary>
private void getAnalogDataFromPlc()
{
// recupero i dati di manutenzione dall'area di memoria IN BLOCCO
int memIndex = 19434;
uint[] tabDatiAnalog = new uint[analogData.Length];
inizio = DateTime.Now;
OsaiMemRW_DWord(R, OSAI.MemTypeWord.MW_CODE, memIndex, ref tabDatiAnalog);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiAnalog", tabDatiAnalog.Length * 4), DateTime.Now.Subtract(inizio).Ticks);
// decodifico aree memoria secondo tab configurazione
processAnalogData(tabDatiAnalog, analogData);
}
#region implementazione processing GlobalData
/// <summary>
/// Gestione lettura dati status da PLC
/// Legge dati globali...
/// </summary>
private void getStatusDataFromPlc()
public override void readGlobalData()
{
// recupero i dati di manutenzione dall'area di memoria IN BLOCCO
int memIndex = 19426;
int numByte = 1 + (statusData.Length / 8);
byte[] tabDatiStatus = new byte[numByte];
inizio = DateTime.Now;
OsaiMemRW_Byte(R, OSAI.MemTypeWord.MW_CODE, memIndex, 0, ref tabDatiStatus);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiStatus", tabDatiStatus.Length), DateTime.Now.Subtract(inizio).Ticks);
// decodifico aree memoria secondo tab configurazione
processStatusData(tabDatiStatus, statusData);
}
/// <summary>
/// Leggo dati globali comuni (x path, assi...)
/// </summary>
public override void getGlobalData()
{
base.getGlobalData();
// svuoto...
parentForm.dataMonitor_1 = "";
parentForm.dataMonitor_2 = "";
parentForm.dataMonitor_3 = "";
// accodo dati path in DataMonitor......
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...
parentForm.commPlcActive = true;
inizio = DateTime.Now;
@@ -540,45 +484,69 @@ namespace MTC_Adapter
// recupero speed e feed...
FeedRate = Convert.ToInt32(allNcData.realfeed);
SpeedRate = Convert.ToInt32(allNcData.realspeed);
// area path1/2: 7 WORD x ogni path...
int memIndex = 19151;
ushort[] PathData_mem = new ushort[14];
inizio = DateTime.Now;
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);
// inizio indicando feed...
sb1.AppendLine(string.Format("FeedRate: {0} mm/min", FeedRate));
sb1.AppendLine(string.Format("SpeedRate: {0} mm/min", SpeedRate));
// 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 sb1);
//...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 sb1);
}
// se ho allarmi li accodo...
if (allNcData.lastncerror != 0)
}
/// <summary>
/// legge dati override...
/// </summary>
/// <param name="sb1"></param>
/// <returns></returns>
public override bool readOverrides(ref StringBuilder sb1)
{
bool fatto = false;
try
{
if (utils.CRI("loglevel") > 5)
// area path1/2: 7 WORD x ogni path...
int memIndex = 19151;
ushort[] PathData_mem = new ushort[14];
inizio = DateTime.Now;
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);
// inizio indicando feed...
sb1.AppendLine(string.Format("FeedRate: {0} mm/min", FeedRate));
sb1.AppendLine(string.Format("SpeedRate: {0} mm/min", SpeedRate));
// 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 sb1);
//...e se c'è pure il secondo...
if (currAdpConf.nPath > 1)
{
lg.Info(string.Format("Allarmi CNC: {0} ", allNcData.lastncerror));
Array.Copy(PathData_mem, 7, currPathData, 0, 7);
// anche il secondo!
procPathOverride(1, currPathData, ref sb1);
}
string alarmText = string.Format("CNC Alarm - Cod: {0}", allNcData.lastncerror);
fatto = true;
}
catch
{ }
return fatto;
}
/// <summary>
/// processa allarmi CNC...
/// </summary>
public override bool procCncAlarm()
{
bool fatto = false;
try
{
// se ho allarmi li accodo...
if (allNcData.lastncerror != 0)
{
// tolgo eventuali allarmi CNC...
allarmiCNC.Clear();
allarmiCNC.Add(allNcData.lastncerror.ToString(), alarmText);
// 2017.05.09 gestione allarmi commentata
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
#if false
mAlarmCNC.Add(MTConnect.Condition.Level.FAULT, alarmText, allNcData.lastncerror.ToString(), "", "");
// mostro in form!
@@ -586,7 +554,7 @@ namespace MTC_Adapter
parentForm.dataMonitor_1 += sb1.ToString();
#endif
// 2017.05.09 gestione allarmi commentata
// 2017.05.09 gestione allarmi commentata
#if false
// 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));
@@ -603,54 +571,100 @@ namespace MTC_Adapter
CMSCncLib.OPENcontrol.MSGANOMALY anomCNC = new CMSCncLib.OPENcontrol.MSGANOMALY();
OSAI_ref.O_ReadCurrentAnomalyMsg(ref anomCNC);
#endif
}
else
{
allarmiCNC.Clear();
allarmiCNC = new Dictionary<string, string>();
// 2017.05.09 gestione allarmi commentata
//allarmiCNC = new CMSCncLib.OPENcontrol.MSGERROR();
}
fatto = true;
}
else
{
allarmiCNC.Clear();
allarmiCNC = new Dictionary<string, string>();
// 2017.05.09 gestione allarmi commentata
//allarmiCNC = new CMSCncLib.OPENcontrol.MSGERROR();
}
// 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();
// gestisco lettura dati analogici da PLC...
getAnalogDataFromPlc();
// gestisco lettura dati status da PLC...
getStatusDataFromPlc();
catch
{ }
return fatto;
}
/// <summary>
/// Processa i dati di override di un path
/// Gestione lettura dati manutenzione
/// </summary>
/// <param name="currIdx">idx path (zero based)</param>
/// <param name="dataVector">vettore 7 valori dei dati (valori int16 jog/feed/rapid/spindle[1..4])</param>
/// <param name="sb">StringBuilder da aggiornare</param>
private void procPathOverride(int currIdx, ushort[] dataVector, ref StringBuilder sb)
public override bool getMtzDataFromPlc()
{
// 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));
bool fatto = false;
try
{
if (maintData.Length > 0)
{
// recupero i dati di manutenzione dall'area di memoria IN BLOCCO
int memIndex = 1000;
uint[] tabDatiMtz = new uint[maintData.Length];
inizio = DateTime.Now;
OsaiMemRW_DWord(R, OSAI.MemTypeWord.GW_CODE, memIndex, ref tabDatiMtz);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiMtz", tabDatiMtz.Length * 4), DateTime.Now.Subtract(inizio).Ticks);
// decodifico aree memoria secondo tab configurazione
processMaintData(tabDatiMtz, maintData);
// verifica se debba salvare e mostrare dati
checkSavePersDataLayer();
}
fatto = true;
}
catch
{ }
return fatto;
}
/// <summary>
/// Gestione lettura dati analogici
/// </summary>
public override bool getAnalogDataFromPlc()
{
bool fatto = false;
try
{
if (analogData.Length > 0)
{
// recupero i dati di manutenzione dall'area di memoria IN BLOCCO
int memIndex = 19434;
uint[] tabDatiAnalog = new uint[analogData.Length];
inizio = DateTime.Now;
OsaiMemRW_DWord(R, OSAI.MemTypeWord.MW_CODE, memIndex, ref tabDatiAnalog);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiAnalog", tabDatiAnalog.Length * 4), DateTime.Now.Subtract(inizio).Ticks);
// decodifico aree memoria secondo tab configurazione
processAnalogData(tabDatiAnalog, analogData);
}
fatto = true;
}
catch
{ }
return fatto;
}
/// <summary>
/// Gestione lettura dati status da PLC
/// </summary>
public override bool getStatusDataFromPlc()
{
bool fatto = false;
try
{
if (statusData.Length > 0)
{
// recupero i dati di manutenzione dall'area di memoria IN BLOCCO
int memIndex = 19426;
int numByte = 1 + (statusData.Length / 8);
byte[] tabDatiStatus = new byte[numByte];
inizio = DateTime.Now;
OsaiMemRW_Byte(R, OSAI.MemTypeWord.MW_CODE, memIndex, 0, ref tabDatiStatus);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiStatus", tabDatiStatus.Length), DateTime.Now.Subtract(inizio).Ticks);
// decodifico aree memoria secondo tab configurazione
processStatusData(tabDatiStatus, statusData);
}
fatto = true;
}
catch
{ }
return fatto;
}
#endregion
/// <summary>
/// Carico file conf dati CMS
+182 -116
View File
@@ -27,7 +27,7 @@ namespace MTC_Adapter
/// Area di memoria base x dati TESTE (DB254)
/// </summary>
protected int baseMemUO = 254;
/// <summary>
/// wrapper chiamata lettura/scrittura SINGOLO BYTE...
/// </summary>
@@ -127,7 +127,7 @@ namespace MTC_Adapter
parentForm.commPlcActive = true;
answ = SIEMENS_ref.S_RW_DWord(bWrite, MemType, memIndex, ref Value);
}
catch(Exception exc)
catch (Exception exc)
{
lg.Error(string.Format("Eccezione in SIEMENSMemRW_DWord: {0}{1}", Environment.NewLine, exc));
}
@@ -331,7 +331,7 @@ namespace MTC_Adapter
try
{
inizio = DateTime.Now;
SIEMENSMemRW_Byte(W, baseMemDb, memIndexAck, ref currACK_DW);
SIEMENSMemRW_Byte(W, baseMemDb, memIndexAck, ref currACK_DW);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("W{0}-ACK_DW0", currACK_DW.Length), DateTime.Now.Subtract(inizio).Ticks);
fatto = true;
}
@@ -373,7 +373,7 @@ namespace MTC_Adapter
public override bool writeWatchDog(ref byte[] retACK_DW)
{
int memIndex = 8;
return SIEMENSMemRW_Byte(W, baseMemDb, memIndex, ref retACK_DW);
return SIEMENSMemRW_Byte(W, baseMemDb, memIndex, ref retACK_DW);
}
/// <summary>
/// Effettua lettura dati TESTING
@@ -408,7 +408,7 @@ namespace MTC_Adapter
{
// DB1499.DBX0.0
int memIndexAck = 0;
return SIEMENSMemRW_Byte(W, baseMemDb, memIndexAck, ref retACK_DW0);
return SIEMENSMemRW_Byte(W, baseMemDb, memIndexAck, ref retACK_DW0);
}
/// <summary>
@@ -434,137 +434,203 @@ namespace MTC_Adapter
int memIndex = 36;
return SIEMENSMemRW_DWord(R, baseMemDb, memIndex + blockIndex * 4, ref MemBlock);
}
#region implementazione processing GlobalData
/// <summary>
/// Legge dati globali...
/// </summary>
public override void readGlobalData()
{
// cercare funzione!!!
#if false
// leggo dati globali...
parentForm.commPlcActive = true;
inizio = DateTime.Now;
OSAI_ref.O_GetNcInfo1(ref allNcData);
if (utils.CRB("recTime")) TimingData.addResult("R-NcInfo", DateTime.Now.Subtract(inizio).Ticks);
parentForm.commPlcActive = false;
// recupero speed e feed...
FeedRate = Convert.ToInt32(allNcData.realfeed);
SpeedRate = Convert.ToInt32(allNcData.realspeed);
#endif
}
/// <summary>
/// legge dati override...
/// </summary>
/// <param name="sb1"></param>
/// <returns></returns>
public override bool readOverrides(ref StringBuilder sb1)
{
bool fatto = false;
try
{
// area path1/2: 7 WORD x ogni path...
int memIndex = 508;
ushort[] PathData_mem = new ushort[14];
parentForm.commPlcActive = true;
inizio = DateTime.Now;
SIEMENSMemRW_Word(R, baseMemDb, memIndex, ref PathData_mem);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-PathData", PathData_mem.Length * 2), DateTime.Now.Subtract(inizio).Ticks);
parentForm.commPlcActive = false;
// inizio indicando feed...
sb1.AppendLine(string.Format("FeedRate: {0} mm/min", FeedRate));
sb1.AppendLine(string.Format("SpeedRate: {0} mm/min", SpeedRate));
// 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 sb1);
//...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 sb1);
}
fatto = true;
}
catch
{ }
return fatto;
}
/// <summary>
/// processa allarmi CNC...
/// </summary>
public override bool procCncAlarm()
{
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));
//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();
}
else
{
allarmiCNC.Clear();
allarmiCNC = new Dictionary<string, string>();
// 2017.05.09 gestione allarmi commentata
//allarmiCNC = new CMSCncLib.OPENcontrol.MSGERROR();
}
fatto = true;
#endif
}
catch
{ }
return fatto;
}
/// <summary>
/// Gestione lettura dati manutenzione
/// </summary>
private void getMtzDataFromPlc()
public override bool getMtzDataFromPlc()
{
if (maintData.Length > 0)
bool fatto = false;
try
{
// recupero i dati di manutenzione dall'area di memoria IN BLOCCO
int memIndex = 524;
uint[] tabDatiMtz = new uint[maintData.Length];
inizio = DateTime.Now;
SIEMENSMemRW_DWord(R, baseMemDb, memIndex, ref tabDatiMtz);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiMtz", tabDatiMtz.Length * 4), DateTime.Now.Subtract(inizio).Ticks);
// decodifico aree memoria secondo tab configurazione
processMaintData(tabDatiMtz, maintData);
// verifica se debba salvare e mostrare dati
checkSavePersDataLayer();
}
}
/// <summary>
/// Gestione lettura dati status da PLC
/// </summary>
private void getStatusDataFromPlc()
{
if (statusData.Length > 0)
{
// recupero i dati di manutenzione dall'area di memoria IN BLOCCO
int memIndex = 1036;
int numByte = 1 + (statusData.Length / 8);
byte[] tabDatiStatus = new byte[numByte];
inizio = DateTime.Now;
SIEMENSMemRW_Byte(R, baseMemDb, memIndex, ref tabDatiStatus);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiStatus", tabDatiStatus.Length), DateTime.Now.Subtract(inizio).Ticks);
// decodifico aree memoria secondo tab configurazione
processStatusData(tabDatiStatus, statusData);
if (maintData.Length > 0)
{
// recupero i dati di manutenzione dall'area di memoria IN BLOCCO
int memIndex = 524;
uint[] tabDatiMtz = new uint[maintData.Length];
inizio = DateTime.Now;
SIEMENSMemRW_DWord(R, baseMemDb, memIndex, ref tabDatiMtz);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiMtz", tabDatiMtz.Length * 4), DateTime.Now.Subtract(inizio).Ticks);
// decodifico aree memoria secondo tab configurazione
processMaintData(tabDatiMtz, maintData);
// verifica se debba salvare e mostrare dati
checkSavePersDataLayer();
}
fatto = true;
}
catch
{ }
return fatto;
}
/// <summary>
/// Gestione lettura dati analogici
/// </summary>
private void getAnalogDataFromPlc()
public override bool getAnalogDataFromPlc()
{
if (analogData.Length > 0)
bool fatto = false;
try
{
// recupero i dati di manutenzione dall'area di memoria IN BLOCCO
int memIndex = 1052;
uint[] tabDatiAnalog = new uint[analogData.Length];
inizio = DateTime.Now;
SIEMENSMemRW_DWord(R, baseMemDb, memIndex, ref tabDatiAnalog);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiAnalog", tabDatiAnalog.Length * 4), DateTime.Now.Subtract(inizio).Ticks);
// decodifico aree memoria secondo tab configurazione
processAnalogData(tabDatiAnalog, analogData);
if (analogData.Length > 0)
{
// recupero i dati di manutenzione dall'area di memoria IN BLOCCO
int memIndex = 1052;
uint[] tabDatiAnalog = new uint[analogData.Length];
inizio = DateTime.Now;
SIEMENSMemRW_DWord(R, baseMemDb, memIndex, ref tabDatiAnalog);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiAnalog", tabDatiAnalog.Length * 4), DateTime.Now.Subtract(inizio).Ticks);
// decodifico aree memoria secondo tab configurazione
processAnalogData(tabDatiAnalog, analogData);
}
fatto = true;
}
catch
{ }
return fatto;
}
/// <summary>
/// Leggo dati globali comuni (x path, assi...)
/// Gestione lettura dati status da PLC
/// </summary>
public override void getGlobalData()
public override bool getStatusDataFromPlc()
{
base.getGlobalData();
// svuoto...
parentForm.dataMonitor_1 = "";
parentForm.dataMonitor_2 = "";
parentForm.dataMonitor_3 = "";
// accodo dati path in DataMonitor......
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));
#if false
// leggo dati globali...
inizio = DateTime.Now;
allDynData = SIEMENS_ref.getAllDynData();
if (utils.CRB("recTime")) TimingData.addResult("R-ALL-DYN-DATA", DateTime.Now.Subtract(inizio).Ticks);
FeedRate = allDynData.actf;
int memIndex = 12000;
byte[] PathData_mem = new byte[4];
inizio = DateTime.Now;
SIEMENSMemRW(R, baseMemDb, memIndex, ref PathData_mem);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-PathData", PathData_mem.Length), DateTime.Now.Subtract(inizio).Ticks);
// 2016.07.19 mod con Fabio
//JogRateOver = PathData_mem[0];
FeedRateOver = PathData_mem[1];
RapidOver = PathData_mem[2];
SpeedRateOver = PathData_mem[3];
#endif
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)
bool fatto = false;
try
{
sb1.AppendLine(string.Format("Allarmi CNC: {0}", allDynData.alarm));
#if false
inizio = DateTime.Now;
allarmiCNC = SIEMENS_ref.getCncAlarm();
if (utils.CRB("recTime")) TimingData.addResult("R-CNC-ALARMS", DateTime.Now.Subtract(inizio).Ticks);
#endif
checkCNCAlarms();
if (statusData.Length > 0)
{
// recupero i dati di manutenzione dall'area di memoria IN BLOCCO
int memIndex = 1036;
int numByte = 1 + (statusData.Length / 8);
byte[] tabDatiStatus = new byte[numByte];
inizio = DateTime.Now;
SIEMENSMemRW_Byte(R, baseMemDb, memIndex, ref tabDatiStatus);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-DatiStatus", tabDatiStatus.Length), DateTime.Now.Subtract(inizio).Ticks);
// decodifico aree memoria secondo tab configurazione
processStatusData(tabDatiStatus, statusData);
}
fatto = true;
}
else
{
allarmiCNC = new CMSCncLib.Focas1.ODBALMMSG2();
}
// 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();
// gestisco lettura dati analogici da PLC...
getAnalogDataFromPlc();
// gestisco lettura dati status da PLC...
getStatusDataFromPlc();
catch
{ }
return fatto;
}
#endregion
/// <summary>
/// Carico file conf dati CMS
/// </summary>