riscrittura gestione dati da OSAI x posizioni
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user