primi metodi OSAI x lettura posizione assi...

This commit is contained in:
Samuele E. Locatelli
2017-04-24 16:05:21 +02:00
parent 0ac8bf1c7f
commit d6412efa8a
3 changed files with 79 additions and 68 deletions
@@ -948,6 +948,14 @@ Namespace CNC
Public Overridable Function O_ReadCurrentAnomalyMsg(ByRef CurrMsgAnomaly As OPENcontrol.MSGANOMALY) As Boolean
Return True
End Function
''' <summary>
''' Restituisce posizione assi (tutti)
''' </summary>
''' <param name="AxisPos"></param>
''' <returns></returns>
Public Overridable Function getAllAxisPos(ByRef AxisPos As OPENcontrol.GETINTDATA()) As Boolean
Return True
End Function
#End Region
@@ -1095,35 +1095,40 @@ Retry: nRetry += 1
End Function
#If False Then
Public Function getAllAxisPos() As Focas1.ODBPOS
Public Overloads Overrides Function getAllAxisPos(ByRef AxisPos As OPENcontrol.GETINTDATA()) As Boolean
' RIFERIMENTO:
' C:\Users\samuele\Documents\FOCAS A02B-0207-K737_04.20\Document\SpecE\Position\cnc_rdposition.htm
' CndexLinkUser.pdf | pag 146, 266
Dim nPathIdx As Integer
Dim nNumAxisRead As Integer
Dim nReturn As Integer
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
Dim posizAssi As Focas1.ODBPOS
Try
O_GetSelectedProcess(ProcessId)
myGetAxesPosition.ProcNum = ProcessId
myGetAxesPosition.AxisName = "0"
myGetAxesPosition.NumAxis = AxisPos.Length
myGetAxesPosition.Select = 1
'leggo il numero del processo attivo
nPathIdx = GetActivePath()
'leggo num max assi dal cn
nNumAxisRead = Focas1.MAX_AXIS
If Is30Series Then
' leggo tutto!!!
nReturn = Focas1.cnc_rdposition(nLibHandle(nPathIdx), -1, nNumAxisRead, posizAssi)
If F_CheckRetError_Cnc(nReturn, "cnc_rdposition RefreshAxisPosition CNC.FANUC.CMS_CncLib") Then
Throw New CmsNcException("ERR cnc_rdposition RefreshAxisPosition CNC.FANUC.CMS_CncLib")
myGetAxesPositionR = OPENws.GetAxesPosition(myGetAxesPosition)
If O_CheckRetError(myGetAxesPositionR.retval, myGetAxesPositionR.ErrClass, myGetAxesPositionR.ErrNum, "ReadCurrentAnomalyMsg() O_ReadCurrentAnomalyMsg CNC.OSAI_OPEN", szReturn) Then
Throw New CmsNcException(szReturn)
Return False
End If
End If
Return posizAssi
AxisPos = myGetAxesPositionR.IntPos
Return True
Catch ex As System.ServiceModel.CommunicationException
If nRetry < MAXRET Then GoTo Retry
Throw New CmsNcException(ex.Message)
Return False
End Try
End Function
#If False Then
Public Function getAllAxisLoad() As Focas1.ODBSVLOAD
' RIFERIMENTO:
+45 -47
View File
@@ -10,7 +10,9 @@ namespace MTC_Adapter
{
public class AdapterOsai : 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
@@ -20,7 +22,6 @@ namespace MTC_Adapter
/// Contenuto valori status data da PLC
/// </summary>
public otherData[] statusData;
/// <summary>
/// Oggetto MAIN x connessione OSAI
/// </summary>
@@ -159,7 +160,6 @@ namespace MTC_Adapter
}
return answ;
}
/// <summary>
/// struttura dati OSAI x dati NC (pag 148)
/// </summary>
@@ -168,7 +168,6 @@ namespace MTC_Adapter
/// Vettore degli allarmi CNC attivi
/// </summary>
public CMSCncLib.OPENcontrol.MSGERROR allarmiCNC;
/// <summary>
/// estende l'init della classe base...
/// </summary>
@@ -318,7 +317,6 @@ namespace MTC_Adapter
lg.Error("Errore connessione mancante in getStrobeAndAckStatus");
}
}
/// <summary>
/// processing strobe!
/// </summary>
@@ -361,7 +359,6 @@ namespace MTC_Adapter
// gestione bit di watchdog... sulal DWord successiva
sendWatchDog();
}
/// <summary>
/// Processa strobe x un dato path
/// </summary>
@@ -531,7 +528,6 @@ namespace MTC_Adapter
if (utils.CRB("recTime")) TimingData.addResult(string.Format("W{0}-B", retACK_DW.Length), DateTime.Now.Subtract(inizio).Ticks);
}
}
/// <summary>
/// Recupero info su test: numero + elenco parametri IN/OUT
/// </summary>
@@ -573,7 +569,6 @@ namespace MTC_Adapter
return answ;
}
/// <summary>
/// Gestione STROBE --> ACK per codici M/S/T
/// </summary>
@@ -697,7 +692,6 @@ namespace MTC_Adapter
}
}
}
/// <summary>
/// Gestione strobe UserAction: salva dati e gestione ACK
/// </summary>
@@ -821,7 +815,6 @@ namespace MTC_Adapter
}
}
}
/// <summary>
/// processing!
/// </summary>
@@ -1086,12 +1079,9 @@ namespace MTC_Adapter
vettPath[idxPath].mPathSubMode.Value = pathSubMode;
}
}
public override void getConfigParam()
{
base.getConfigParam();
}
/// <summary>
/// Recupera dati a lenta variazione
/// </summary>
public override void getSlowChangingData()
{
base.getSlowChangingData();
@@ -1100,8 +1090,7 @@ namespace MTC_Adapter
reloadDataFromFile();
// area gestione dati utensili... in base al num max di UnOp recupero i dati utensile... PROCEDURA AD HOC!!!
getDatiUt_Fanuc(currAdpConf.nUnOp);
getDatiUt_Osai(currAdpConf.nUnOp);
}
/// <summary>
/// Gestione lettura dati manutenzione
@@ -1153,8 +1142,10 @@ namespace MTC_Adapter
inizio = DateTime.Now;
OSAI_ref.O_GetNcInfo1(ref allNcData);
if (utils.CRB("recTime")) TimingData.addResult("R-NcInfo", DateTime.Now.Subtract(inizio).Ticks);
// recupero feed...
// 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;
@@ -1165,6 +1156,7 @@ namespace MTC_Adapter
// inizio indicando feed...
sb.AppendLine(string.Format("FeedRate: {0} mm/min", FeedRate));
sb.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];
@@ -1310,7 +1302,9 @@ 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();
@@ -1318,7 +1312,6 @@ namespace MTC_Adapter
// aggiungo gestione allarmi CNC
checkCNCAlarms();
}
/// <summary>
/// Verifica i 10 allarmi CNC SE presenti
/// </summary>
@@ -1329,7 +1322,6 @@ namespace MTC_Adapter
sendAlarmIfPresent(allarmiCNC);
}
}
/// <summary>
/// Invia singolo allarme CNC se presente
/// </summary>
@@ -1358,10 +1350,13 @@ namespace MTC_Adapter
}
}
}
/// <summary>
/// Recupero dati x UnOp
/// </summary>
public override void getUnOp()
{
base.getUnOp();
// !!!FARE!!! NON HO trovato nulla, verificare con Andrea...
#if false
// leggo in blocco tutte le speed da memoria...
@@ -1373,13 +1368,6 @@ namespace MTC_Adapter
OsaiMemRW(R, FANUC.MemType.D, memIndex, ref unOpSpeedMem);
if (utils.CRB("recTime")) TimingData.addResult(string.Format("R{0}-SPEED_UNOP", unOpSpeedMem.Length), DateTime.Now.Subtract(inizio).Ticks);
// NON VA: RICHIEDE OPZIONE... The extended driver/library function is necessary.
#if false
// recupero vettore load spindle...
inizio = DateTime.Now;
CMSCncLib.Focas1.ODBSPN spindleVect = FANUC_ref.getSpindleLoad();
if (utils.CRB("recTime")) TimingData.addResult("R-SpindleLoad", DateTime.Now.Subtract(inizio).Ticks);
#endif
StringBuilder sb = new StringBuilder();
int numUnOp = currAdpConf.nUnOp;
@@ -1408,7 +1396,7 @@ namespace MTC_Adapter
/// procedura di lettura (Multipla) dati da memoria x caricare dati utensile
/// </summary>
/// <param name="maxNumOp">num max di teste da recuperare</param>
private void getDatiUt_Fanuc(int maxNumOp)
private void getDatiUt_Osai(int maxNumOp)
{
#if false
// variabili "Indice" utensile e famiglia da decodificare + utils
@@ -1550,7 +1538,7 @@ namespace MTC_Adapter
public override void getPath()
{
//NON richiamo metodo base... ma faccio override qui (e altrove...)
// NON richiamo metodo base... ma faccio override qui (e altrove...)
checkPath();
#if false
@@ -1640,30 +1628,33 @@ namespace MTC_Adapter
StringBuilder sb = new StringBuilder();
inizio = DateTime.Now;
#if false
CMSCncLib.Focas1.ODBPOS posAssi = OSAI_ref.getAllAxisPos();
// inizializzo x numero assi...
CMSCncLib.OPENcontrol.GETINTDATA[] posAssi= new CMSCncLib.OPENcontrol.GETINTDATA[currAdpConf.nAxis];
OSAI_ref.getAllAxisPos(ref posAssi);
if (utils.CRB("recTime")) TimingData.addResult("R-AXIS_POS", DateTime.Now.Subtract(inizio).Ticks);
// NON c'è LOAD assi...
#if false
inizio = DateTime.Now;
CMSCncLib.Focas1.ODBSVLOAD loadAssi = OSAI_ref.getAllAxisLoad();
if (utils.CRB("recTime")) TimingData.addResult("R-AXIS_LOAD", DateTime.Now.Subtract(inizio).Ticks);
CMSCncLib.Focas1.LOADELM valLoad = new CMSCncLib.Focas1.LOADELM();
CMSCncLib.Focas1.POSELMALL valPos = new CMSCncLib.Focas1.POSELMALL();
if (utils.CRB("recTime")) TimingData.addResult("R-AXIS_LOAD", DateTime.Now.Subtract(inizio).Ticks);
#endif
// nuova posizione (per calcoli)
double newPos = 0;
double distPerc = 0;
int newDir = 0;
string tipoAsse = "";
string direzione = "";
char axName;
// ciclo x assi
for (int i = 0; i < currAdpConf.nAxis; i++)
{
// per sicurezza try-catch
try
{
// in base a indice scelgo valore posizione e load
#if false
switch (i)
{
case 0:
@@ -1799,13 +1790,22 @@ namespace MTC_Adapter
valPos = posAssi.p1;
valLoad = loadAssi.svload1;
break;
}
}
#endif
//string axName = System.Text.Encoding.ASCII.GetString(posAssi[i].AxisName);
axName = Convert.ToChar(posAssi[i].AxisName);
newPos = posAssi[i].position;
// popolo valori...
vettAxis[i].mAxLoad.Value = (double)(valLoad.data) / Math.Pow(10, valLoad.dec);
#if false
vettAxis[i].mAxLoad.Value = (double)(valLoad.data) / Math.Pow(10, valLoad.dec);
newPos = (double)(valPos.abs.data) / Math.Pow(10, valPos.abs.dec);
#endif
vettAxis[i].mAxPosAct.Value = newPos;
vettAxis[i].mAxPosTgt.Value = newPos + (double)(valPos.dist.data) / Math.Pow(10, valPos.dist.dec);
#if false
vettAxis[i].mAxPosTgt.Value = newPos + (double)(valPos.dist.data) / Math.Pow(10, valPos.dist.dec);
#endif
vettAxis[i].mAxFeedAct.Value = FeedRate;
@@ -1839,8 +1839,7 @@ 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));
sb.AppendLine(string.Format("Asse {0}: PosAct:{1:N3}, ToGo:{2:N3}{3} | {4}", axName, newPos, "", "...", direzione));
}
// salvo valori vettore prec...
@@ -1860,8 +1859,7 @@ namespace MTC_Adapter
}
}
parentForm.dataMonitor += sb.ToString();
#endif
parentForm.dataMonitor += sb.ToString();
}
}
}