riscrittura gestione dati da OSAI x posizioni

This commit is contained in:
Samuele E. Locatelli
2018-01-16 14:55:57 +01:00
parent aa4bc8c486
commit 56462c35f5
4 changed files with 124 additions and 20 deletions
@@ -888,10 +888,11 @@ Namespace CNC
''' <summary>
''' Restituisce posizione assi (tutti)
''' </summary>
''' <param name="tipoPos">Tipo posizione richeista (1..6)</param>
''' <param name="tipoPos">Tipo posizione richiesta (1..6 / 1=tgt, 2 = act)</param>
''' <param name="ProcessId">Path/Processo (1..n)</param>
''' <param name="AxisPos">Vettore posizioni richieste</param>
''' <returns></returns>
Public Overridable Function getAllAxisPos(tipoPos As Int16, ByRef AxisPos As OPENcontrol.GETINTDATA()) As Boolean
Public Overridable Function getAllAxisPos(tipoPos As Int16, ProcessId As Short, ByRef AxisPos As OPENcontrol.GETINTDATA()) As Boolean
Return True
End Function
''' <summary>
@@ -1048,19 +1048,18 @@ Retry: nRetry += 1
End Try
End Function
Public Overloads Overrides Function getAllAxisPos(tipoPos As Int16, ByRef AxisPos As OPENcontrol.GETINTDATA()) As Boolean
Public Overloads Overrides Function getAllAxisPos(tipoPos As Int16, ProcessId As Short, ByRef AxisPos As OPENcontrol.GETINTDATA()) As Boolean
' RIFERIMENTO:
' CndexLinkUser.pdf | pag 146, 266
Dim szReturn As String = ""
Dim myGetAxesPositionR As OPENcontrol.GetAxesPositionR
Dim myGetAxesPosition As New OPENcontrol.GetAxesPosition
Dim ProcessId As Short
Dim nRetry As Integer
Retry: nRetry += 1
Try
O_GetSelectedProcess(ProcessId)
'O_GetSelectedProcess(ProcessId)
myGetAxesPosition.ProcNum = ProcessId
myGetAxesPosition.AxisName = "0"
myGetAxesPosition.NumAxis = AxisPos.Length
+29
View File
@@ -569,6 +569,35 @@ namespace MTC
((inValue & 0x000000ff) << 24));
}
}
#if false
/// <summary>
/// Helper gestione dati degli assi...
/// </summary>
public class axisTabOsai
{
/// <summary>
/// ID univoco (numerico) asse
/// </summary>
public int Id;
/// <summary>
/// Nome (etichetta) asse
/// </summary>
public char Nome;
/// <summary>
/// Path di apaprtenenza asse
/// </summary>
public int Path;
/// <summary>
/// Init oggetto
/// </summary>
public axisTabOsai()
{
Id = 0;
Nome = '\0';
Path = 0;
}
}
#endif
public enum tipoAdapter
+90 -15
View File
@@ -979,13 +979,91 @@ namespace MTC_Adapter
parentForm.commPlcActive = true;
inizio = DateTime.Now;
/*------------------------------------------------------------------------
* 2018.01.16 modifica per gestione doppio processo e nome assi duplicato
* ------------------------------------------------------------------------
*
* E' risultato (marco.negri, amcchian OSAI con 2 processi in cui glia ssi di ogni processoa vevano lo stesso nome) ceh OSAI NON restituisce ID univoco asse ma nome etichetta asegnato
* in questo modo glia ssi verso agent (e seguenti) si sovrappongono/sovrascrivono
*
* E' quindi necessario procedere in + step
* - verificare numero processia ttivi
* - chiedere x ogni processo quali assi ci siano (AsixTable (con Id UNIVOCO e consistente e NOME)
* - chiedere x ogni processo le posizioni assi in modo che processo + nome --> Id Univoco --> possiamo popolare la tabella da invaire poi all'agent
*/
// inizializzo x numero assi...
CMSCncLib.OPENcontrol.GETINTDATA[] tmpPosAssiTgt = new CMSCncLib.OPENcontrol.GETINTDATA[currAdpConf.nAxis];
CMSCncLib.OPENcontrol.GETINTDATA[] tmpPosAssi = new CMSCncLib.OPENcontrol.GETINTDATA[currAdpConf.nAxis];
CMSCncLib.OPENcontrol.GETINTDATA[] posAssiTgt = new CMSCncLib.OPENcontrol.GETINTDATA[currAdpConf.nAxis];
CMSCncLib.OPENcontrol.GETINTDATA[] posAssi = new CMSCncLib.OPENcontrol.GETINTDATA[currAdpConf.nAxis];
OSAI_ref.getAllAxisPos(1, ref posAssiTgt);
OSAI_ref.getAllAxisPos(2, ref posAssi);
if (utils.CRB("recTime")) TimingData.addResult("R-AXIS_POS", DateTime.Now.Subtract(inizio).Ticks);
parentForm.commPlcActive = false;
#if false
//axisTabOsai[] axisTab = new axisTabOsai[currAdpConf.nAxis];
#endif
Dictionary<string, int> axisDict = new Dictionary<string, int>();
char[] axisTable = new char[currAdpConf.nAxis];
short[] axisIdTable = new short[currAdpConf.nAxis];
int currId = 0;
// verifico quanti path ho... e recupero le info sugli assi (se id > 0 è PRESENTE...)
for (short i = 1; i <= currAdpConf.nPath; i++)
{
// chiamo lettura tab assi
OSAI_ref.O_GetAxisTab(i, ref axisTable, ref axisIdTable);
//...e popolo i dati...
for (int j = 0; j < currAdpConf.nAxis; j++)
{
// recupero Id...
currId = axisIdTable[j];
// controllo se id > 0...
if (currId > 0)
{
// salvo!!! come path#nome
axisDict.Add(string.Format("{0}#{1}", i, axisTable[j]), currId);
#if false
//axisTab[currId - 1].Id = currId;
//axisTab[currId - 1].Nome = axisTable[j];
//axisTab[currId - 1].Path = i;
#endif
}
}
}
char axName;
int reIdx = 0;
// ora processo i dati PER PATH delle posizioni assi...
for (short i = 1; i <= currAdpConf.nPath; i++)
{
OSAI_ref.getAllAxisPos(1, i, ref tmpPosAssiTgt);
OSAI_ref.getAllAxisPos(2, i, ref tmpPosAssi);
// decodifico e salvo in posizione corretta...
for (int j = 0; j < currAdpConf.nAxis; j++)
{
// per sicurezza try-catch
try
{
if (tmpPosAssiTgt[j].AxisName == 0)
{
axName = '-';
}
else
{
axName = Convert.ToChar(tmpPosAssiTgt[j].AxisName);
}
// salvo nella posizione DECODIFICATA da dictionary x path/nome...
if (axName != '\0' && axName != '-')
{
// calcolo ID REALE
reIdx = axisDict[string.Format("{0}#{1}", i, axName)];
posAssiTgt[reIdx - 1] = tmpPosAssiTgt[j];
posAssi[reIdx - 1] = tmpPosAssi[j];
}
}
catch
{ }
}
}
// nuova posizione (per calcoli)
double newPos = 0;
@@ -994,17 +1072,7 @@ namespace MTC_Adapter
int newDir = 0;
string tipoAsse = "";
string direzione = "";
char axName;
// 2018.01.16 cerco info assi...
char[] axisTable1 = new char[64];
short[] axisIdTable1 = new short[64];
char[] axisTable2 = new char[64];
short[] axisIdTable2 = new short[64];
OSAI_ref.O_GetAxisTab(1, ref axisTable1, ref axisIdTable1);
OSAI_ref.O_GetAxisTab(2, ref axisTable2, ref axisIdTable2);
// ciclo x assi
// ORA ho tutto in posizione corretta, PROCESSO!!!
for (int i = 0; i < currAdpConf.nAxis; i++)
{
// per sicurezza try-catch
@@ -1019,6 +1087,7 @@ namespace MTC_Adapter
{
axName = Convert.ToChar(posAssiTgt[i].AxisName);
}
newPos = posAssi[i].position;
newPosTgt = posAssiTgt[i].position;
@@ -1074,6 +1143,12 @@ namespace MTC_Adapter
lg.Error(string.Format("Errore in lettura asse {0}", i));
}
}
// salvo timing!
if (utils.CRB("recTime")) TimingData.addResult("R-AXIS_POS", DateTime.Now.Subtract(inizio).Ticks);
parentForm.commPlcActive = false;
parentForm.dataMonitor_3 += sb.ToString();
}