portato in AdapterGeneric metodi x gestione globalData (e implementato in OSAI/SIEMENS
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user