Compare commits
No commits in common. "4aa1e8ec27dbba197e89426eb091983f4cc7f34f" and "c0ff14a5ae8c413c6708cddd06c61e59270a1ea7" have entirely different histories.
4aa1e8ec27
...
c0ff14a5ae
276
PLCViewModel.cs
276
PLCViewModel.cs
|
@ -57,13 +57,6 @@ namespace LibS7Adv
|
||||||
private DateTime _lastUpdateStartTime = DateTime.MinValue;
|
private DateTime _lastUpdateStartTime = DateTime.MinValue;
|
||||||
private TimeSpan _updateTimeout = TimeSpan.FromSeconds(10); // Timeout para reintentar después de un tiempo
|
private TimeSpan _updateTimeout = TimeSpan.FromSeconds(10); // Timeout para reintentar después de un tiempo
|
||||||
|
|
||||||
// Añadir protección contra loops infinitos
|
|
||||||
private readonly object _updateLock = new object();
|
|
||||||
private int _concurrentUpdateCount = 0;
|
|
||||||
private const int MAX_CONCURRENT_UPDATES = 1;
|
|
||||||
private DateTime _lastUpdateAttempt = DateTime.MinValue;
|
|
||||||
private readonly TimeSpan _minUpdateInterval = TimeSpan.FromSeconds(2);
|
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
PlcData plcData = new PlcData();
|
PlcData plcData = new PlcData();
|
||||||
|
|
||||||
|
@ -129,14 +122,6 @@ namespace LibS7Adv
|
||||||
{
|
{
|
||||||
IsConnected = false;
|
IsConnected = false;
|
||||||
PlcData.ConnectionStatus = "offline";
|
PlcData.ConnectionStatus = "offline";
|
||||||
|
|
||||||
// Limpiar estado al desconectar
|
|
||||||
lock (_updateLock)
|
|
||||||
{
|
|
||||||
_isUpdating = false;
|
|
||||||
_concurrentUpdateCount = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Instance = null;
|
Instance = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,10 +130,10 @@ namespace LibS7Adv
|
||||||
{
|
{
|
||||||
_isUpdating = true;
|
_isUpdating = true;
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
|
|
||||||
// Actualizar cuando recibimos el evento
|
// Actualizar cuando recibimos el evento
|
||||||
SafeUpdateTagList();
|
UpdateTagList();
|
||||||
|
|
||||||
// Cuando la actualización se completa exitosamente, desactivar la bandera
|
// Cuando la actualización se completa exitosamente, desactivar la bandera
|
||||||
if (IsConfigured)
|
if (IsConfigured)
|
||||||
{
|
{
|
||||||
|
@ -156,45 +141,8 @@ namespace LibS7Adv
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Si no se pudo configurar, programar UN SOLO reintento después de un tiempo
|
// Si no se pudo configurar, programar un reintento después de un tiempo
|
||||||
// Solo si no hay otra actualización en curso
|
Task.Delay(1000).ContinueWith(_ => UpdateTagList());
|
||||||
lock (_updateLock)
|
|
||||||
{
|
|
||||||
if (_concurrentUpdateCount == 0)
|
|
||||||
{
|
|
||||||
Task.Delay(2000).ContinueWith(_ => SafeUpdateTagList());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SafeUpdateTagList()
|
|
||||||
{
|
|
||||||
// Verificar si podemos hacer la actualización
|
|
||||||
lock (_updateLock)
|
|
||||||
{
|
|
||||||
// No permitir más de una actualización concurrente
|
|
||||||
if (_concurrentUpdateCount >= MAX_CONCURRENT_UPDATES)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// No actualizar muy frecuentemente
|
|
||||||
if (DateTime.Now - _lastUpdateAttempt < _minUpdateInterval)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_concurrentUpdateCount++;
|
|
||||||
_lastUpdateAttempt = DateTime.Now;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
UpdateTagList();
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
lock (_updateLock)
|
|
||||||
{
|
|
||||||
_concurrentUpdateCount--;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,10 +150,10 @@ namespace LibS7Adv
|
||||||
{
|
{
|
||||||
IsConfigured = false;
|
IsConfigured = false;
|
||||||
_isUpdating = true;
|
_isUpdating = true;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Instance?.UpdateTagList(ETagListDetails.IO | ETagListDetails.DB | ETagListDetails.M, true); //
|
Instance?.UpdateTagList(ETagListDetails.IO | ETagListDetails.DB | ETagListDetails.M, true);
|
||||||
IsConfigured = true;
|
IsConfigured = true;
|
||||||
_isUpdating = false; // Éxito en la actualización
|
_isUpdating = false; // Éxito en la actualización
|
||||||
}
|
}
|
||||||
|
@ -225,7 +173,7 @@ namespace LibS7Adv
|
||||||
PlcData.LastError = "Not Connected";
|
PlcData.LastError = "Not Connected";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verificar si estamos en proceso de actualización
|
// Verificar si estamos en proceso de actualización
|
||||||
if (_isUpdating)
|
if (_isUpdating)
|
||||||
{
|
{
|
||||||
|
@ -234,13 +182,13 @@ namespace LibS7Adv
|
||||||
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
||||||
{
|
{
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
SafeUpdateTagList();
|
UpdateTagList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// No intentar leer durante la actualización
|
// No intentar leer durante la actualización
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sTag == null)
|
if (sTag == null)
|
||||||
{ return false; }
|
{ return false; }
|
||||||
var tag = ParseTagAddress(sTag);
|
var tag = ParseTagAddress(sTag);
|
||||||
|
@ -265,10 +213,10 @@ namespace LibS7Adv
|
||||||
{
|
{
|
||||||
_isUpdating = true;
|
_isUpdating = true;
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
|
|
||||||
// Iniciar actualización de tags de forma segura
|
// Iniciar actualización de tags
|
||||||
SafeUpdateTagList();
|
Task.Run(() => UpdateTagList());
|
||||||
|
|
||||||
PlcData.LastError = sTag + ": Tags no actualizados, reintentando...";
|
PlcData.LastError = sTag + ": Tags no actualizados, reintentando...";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -288,7 +236,7 @@ namespace LibS7Adv
|
||||||
PlcData.LastError = "Not Connected";
|
PlcData.LastError = "Not Connected";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verificar si estamos en proceso de actualización
|
// Verificar si estamos en proceso de actualización
|
||||||
if (_isUpdating)
|
if (_isUpdating)
|
||||||
{
|
{
|
||||||
|
@ -297,13 +245,13 @@ namespace LibS7Adv
|
||||||
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
||||||
{
|
{
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
SafeUpdateTagList();
|
UpdateTagList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// No intentar escribir durante la actualización
|
// No intentar escribir durante la actualización
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sTag == null)
|
if (sTag == null)
|
||||||
{ return false; }
|
{ return false; }
|
||||||
var tag = ParseTagAddress(sTag);
|
var tag = ParseTagAddress(sTag);
|
||||||
|
@ -329,10 +277,10 @@ namespace LibS7Adv
|
||||||
{
|
{
|
||||||
_isUpdating = true;
|
_isUpdating = true;
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
|
|
||||||
// Iniciar actualización de tags de forma segura
|
// Iniciar actualización de tags
|
||||||
SafeUpdateTagList();
|
Task.Run(() => UpdateTagList());
|
||||||
|
|
||||||
PlcData.LastError = sTag + ": Tags no actualizados, reintentando...";
|
PlcData.LastError = sTag + ": Tags no actualizados, reintentando...";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -352,7 +300,7 @@ namespace LibS7Adv
|
||||||
PlcData.LastError = "Not Connected";
|
PlcData.LastError = "Not Connected";
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verificar si estamos en proceso de actualización
|
// Verificar si estamos en proceso de actualización
|
||||||
if (_isUpdating)
|
if (_isUpdating)
|
||||||
{
|
{
|
||||||
|
@ -360,13 +308,13 @@ namespace LibS7Adv
|
||||||
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
||||||
{
|
{
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
SafeUpdateTagList();
|
UpdateTagList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// No intentar leer durante la actualización
|
// No intentar leer durante la actualización
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sTag == null)
|
if (sTag == null)
|
||||||
{ return ""; }
|
{ return ""; }
|
||||||
|
|
||||||
|
@ -429,10 +377,10 @@ namespace LibS7Adv
|
||||||
{
|
{
|
||||||
_isUpdating = true;
|
_isUpdating = true;
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
|
|
||||||
// Iniciar actualización de tags de forma segura
|
// Iniciar actualización de tags
|
||||||
SafeUpdateTagList();
|
Task.Run(() => UpdateTagList());
|
||||||
|
|
||||||
PlcData.LastError = sTag + ": Tags no actualizados, reintentando...";
|
PlcData.LastError = sTag + ": Tags no actualizados, reintentando...";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -456,13 +404,13 @@ namespace LibS7Adv
|
||||||
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
||||||
{
|
{
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
SafeUpdateTagList();
|
UpdateTagList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// No intentar leer durante la actualización
|
// No intentar leer durante la actualización
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Instance?.OutputArea.ReadBit(pByte, (byte)pBit) ?? false;
|
return Instance?.OutputArea.ReadBit(pByte, (byte)pBit) ?? false;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -472,10 +420,10 @@ namespace LibS7Adv
|
||||||
{
|
{
|
||||||
_isUpdating = true;
|
_isUpdating = true;
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
|
|
||||||
// Iniciar actualización de tags de forma segura
|
// Iniciar actualización de tags
|
||||||
SafeUpdateTagList();
|
Task.Run(() => UpdateTagList());
|
||||||
|
|
||||||
PlcData.LastError = "Byte " + pByte + ", Bit " + pBit + ": Tags no actualizados, reintentando...";
|
PlcData.LastError = "Byte " + pByte + ", Bit " + pBit + ": Tags no actualizados, reintentando...";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -497,13 +445,13 @@ namespace LibS7Adv
|
||||||
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
||||||
{
|
{
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
SafeUpdateTagList();
|
UpdateTagList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// No intentar escribir durante la actualización
|
// No intentar escribir durante la actualización
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Instance?.InputArea.WriteBit(pByte, (byte)pBit, pValue);
|
Instance?.InputArea.WriteBit(pByte, (byte)pBit, pValue);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -513,10 +461,10 @@ namespace LibS7Adv
|
||||||
{
|
{
|
||||||
_isUpdating = true;
|
_isUpdating = true;
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
|
|
||||||
// Iniciar actualización de tags de forma segura
|
// Iniciar actualización de tags
|
||||||
SafeUpdateTagList();
|
Task.Run(() => UpdateTagList());
|
||||||
|
|
||||||
PlcData.LastError = "Byte " + pByte + ", Bit " + pBit + ": Tags no actualizados, reintentando...";
|
PlcData.LastError = "Byte " + pByte + ", Bit " + pBit + ": Tags no actualizados, reintentando...";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -525,7 +473,7 @@ namespace LibS7Adv
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void EscribirTag(string pTag, SDataValue Value)
|
public void EscribirTag(string pTag, SDataValue Value)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -535,7 +483,7 @@ namespace LibS7Adv
|
||||||
PlcData.LastError = "Not Connected";
|
PlcData.LastError = "Not Connected";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verificar si estamos en proceso de actualización
|
// Verificar si estamos en proceso de actualización
|
||||||
if (_isUpdating)
|
if (_isUpdating)
|
||||||
{
|
{
|
||||||
|
@ -543,13 +491,13 @@ namespace LibS7Adv
|
||||||
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
||||||
{
|
{
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
SafeUpdateTagList();
|
UpdateTagList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// No intentar escribir durante la actualización
|
// No intentar escribir durante la actualización
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Instance?.Write(pTag, Value);
|
Instance?.Write(pTag, Value);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -559,10 +507,10 @@ namespace LibS7Adv
|
||||||
{
|
{
|
||||||
_isUpdating = true;
|
_isUpdating = true;
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
|
|
||||||
// Iniciar actualización de tags de forma segura
|
// Iniciar actualización de tags
|
||||||
SafeUpdateTagList();
|
Task.Run(() => UpdateTagList());
|
||||||
|
|
||||||
PlcData.LastError = pTag + ": Tags no actualizados, reintentando...";
|
PlcData.LastError = pTag + ": Tags no actualizados, reintentando...";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -571,7 +519,7 @@ namespace LibS7Adv
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public SDataValue LeerTag(string pTag)
|
public SDataValue LeerTag(string pTag)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -581,7 +529,7 @@ namespace LibS7Adv
|
||||||
PlcData.LastError = "Not Connected";
|
PlcData.LastError = "Not Connected";
|
||||||
return new SDataValue();
|
return new SDataValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verificar si estamos en proceso de actualización
|
// Verificar si estamos en proceso de actualización
|
||||||
if (_isUpdating)
|
if (_isUpdating)
|
||||||
{
|
{
|
||||||
|
@ -589,13 +537,13 @@ namespace LibS7Adv
|
||||||
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
||||||
{
|
{
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
SafeUpdateTagList();
|
UpdateTagList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// No intentar leer durante la actualización
|
// No intentar leer durante la actualización
|
||||||
return new SDataValue();
|
return new SDataValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
return Instance.Read(pTag);
|
return Instance.Read(pTag);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -605,10 +553,10 @@ namespace LibS7Adv
|
||||||
{
|
{
|
||||||
_isUpdating = true;
|
_isUpdating = true;
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
|
|
||||||
// Iniciar actualización de tags de forma segura
|
// Iniciar actualización de tags
|
||||||
SafeUpdateTagList();
|
Task.Run(() => UpdateTagList());
|
||||||
|
|
||||||
PlcData.LastError = pTag + ": Tags no actualizados, reintentando...";
|
PlcData.LastError = pTag + ": Tags no actualizados, reintentando...";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -618,7 +566,7 @@ namespace LibS7Adv
|
||||||
return new SDataValue();
|
return new SDataValue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void EscribirTagBool(string pTag, bool pValue)
|
public void EscribirTagBool(string pTag, bool pValue)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -628,7 +576,7 @@ namespace LibS7Adv
|
||||||
PlcData.LastError = "Not Connected";
|
PlcData.LastError = "Not Connected";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verificar si estamos en proceso de actualización
|
// Verificar si estamos en proceso de actualización
|
||||||
if (_isUpdating)
|
if (_isUpdating)
|
||||||
{
|
{
|
||||||
|
@ -636,13 +584,13 @@ namespace LibS7Adv
|
||||||
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
||||||
{
|
{
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
SafeUpdateTagList();
|
UpdateTagList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// No intentar escribir durante la actualización
|
// No intentar escribir durante la actualización
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Instance?.WriteBool(pTag, pValue);
|
Instance?.WriteBool(pTag, pValue);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -652,10 +600,10 @@ namespace LibS7Adv
|
||||||
{
|
{
|
||||||
_isUpdating = true;
|
_isUpdating = true;
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
|
|
||||||
// Iniciar actualización de tags de forma segura
|
// Iniciar actualización de tags
|
||||||
SafeUpdateTagList();
|
Task.Run(() => UpdateTagList());
|
||||||
|
|
||||||
PlcData.LastError = pTag + ": Tags no actualizados, reintentando...";
|
PlcData.LastError = pTag + ": Tags no actualizados, reintentando...";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -673,7 +621,7 @@ namespace LibS7Adv
|
||||||
PlcData.LastError = "Not Connected";
|
PlcData.LastError = "Not Connected";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verificar si estamos en proceso de actualización
|
// Verificar si estamos en proceso de actualización
|
||||||
if (_isUpdating)
|
if (_isUpdating)
|
||||||
{
|
{
|
||||||
|
@ -681,13 +629,13 @@ namespace LibS7Adv
|
||||||
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
||||||
{
|
{
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
SafeUpdateTagList();
|
UpdateTagList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// No intentar escribir durante la actualización
|
// No intentar escribir durante la actualización
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Instance?.WriteInt16(pTag, (short)pValue);
|
Instance?.WriteInt16(pTag, (short)pValue);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -697,10 +645,10 @@ namespace LibS7Adv
|
||||||
{
|
{
|
||||||
_isUpdating = true;
|
_isUpdating = true;
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
|
|
||||||
// Iniciar actualización de tags de forma segura
|
// Iniciar actualización de tags
|
||||||
SafeUpdateTagList();
|
Task.Run(() => UpdateTagList());
|
||||||
|
|
||||||
PlcData.LastError = pTag + ": Tags no actualizados, reintentando...";
|
PlcData.LastError = pTag + ": Tags no actualizados, reintentando...";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -719,7 +667,7 @@ namespace LibS7Adv
|
||||||
PlcData.LastError = "Not Connected";
|
PlcData.LastError = "Not Connected";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verificar si estamos en proceso de actualización
|
// Verificar si estamos en proceso de actualización
|
||||||
if (_isUpdating)
|
if (_isUpdating)
|
||||||
{
|
{
|
||||||
|
@ -727,13 +675,13 @@ namespace LibS7Adv
|
||||||
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
||||||
{
|
{
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
SafeUpdateTagList();
|
UpdateTagList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// No intentar leer durante la actualización
|
// No intentar leer durante la actualización
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool result = Instance?.ReadBool(pTag) ?? false;
|
bool result = Instance?.ReadBool(pTag) ?? false;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -744,10 +692,10 @@ namespace LibS7Adv
|
||||||
{
|
{
|
||||||
_isUpdating = true;
|
_isUpdating = true;
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
|
|
||||||
// Iniciar actualización de tags de forma segura
|
// Iniciar actualización de tags
|
||||||
SafeUpdateTagList();
|
Task.Run(() => UpdateTagList());
|
||||||
|
|
||||||
PlcData.LastError = pTag + ": Tags no actualizados, reintentando...";
|
PlcData.LastError = pTag + ": Tags no actualizados, reintentando...";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -767,7 +715,7 @@ namespace LibS7Adv
|
||||||
PlcData.LastError = "Not Connected";
|
PlcData.LastError = "Not Connected";
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verificar si estamos en proceso de actualización
|
// Verificar si estamos en proceso de actualización
|
||||||
if (_isUpdating)
|
if (_isUpdating)
|
||||||
{
|
{
|
||||||
|
@ -775,13 +723,13 @@ namespace LibS7Adv
|
||||||
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
||||||
{
|
{
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
SafeUpdateTagList();
|
UpdateTagList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// No intentar leer durante la actualización
|
// No intentar leer durante la actualización
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int? result = Instance?.ReadInt16(pTag);
|
int? result = Instance?.ReadInt16(pTag);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -792,10 +740,10 @@ namespace LibS7Adv
|
||||||
{
|
{
|
||||||
_isUpdating = true;
|
_isUpdating = true;
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
|
|
||||||
// Iniciar actualización de tags de forma segura
|
// Iniciar actualización de tags
|
||||||
SafeUpdateTagList();
|
Task.Run(() => UpdateTagList());
|
||||||
|
|
||||||
PlcData.LastError = pTag + ": Tags no actualizados, reintentando...";
|
PlcData.LastError = pTag + ": Tags no actualizados, reintentando...";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -815,7 +763,7 @@ namespace LibS7Adv
|
||||||
PlcData.LastError = "Not Connected";
|
PlcData.LastError = "Not Connected";
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verificar si estamos en proceso de actualización
|
// Verificar si estamos en proceso de actualización
|
||||||
if (_isUpdating)
|
if (_isUpdating)
|
||||||
{
|
{
|
||||||
|
@ -823,13 +771,13 @@ namespace LibS7Adv
|
||||||
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
||||||
{
|
{
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
SafeUpdateTagList();
|
UpdateTagList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// No intentar leer durante la actualización
|
// No intentar leer durante la actualización
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int? result = Instance?.ReadInt32(pTag);
|
int? result = Instance?.ReadInt32(pTag);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -840,10 +788,10 @@ namespace LibS7Adv
|
||||||
{
|
{
|
||||||
_isUpdating = true;
|
_isUpdating = true;
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
|
|
||||||
// Iniciar actualización de tags de forma segura
|
// Iniciar actualización de tags
|
||||||
SafeUpdateTagList();
|
Task.Run(() => UpdateTagList());
|
||||||
|
|
||||||
PlcData.LastError = pTag + ": Tags no actualizados, reintentando...";
|
PlcData.LastError = pTag + ": Tags no actualizados, reintentando...";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -863,7 +811,7 @@ namespace LibS7Adv
|
||||||
PlcData.LastError = "Not Connected";
|
PlcData.LastError = "Not Connected";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verificar si estamos en proceso de actualización
|
// Verificar si estamos en proceso de actualización
|
||||||
if (_isUpdating)
|
if (_isUpdating)
|
||||||
{
|
{
|
||||||
|
@ -871,13 +819,13 @@ namespace LibS7Adv
|
||||||
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
if (DateTime.Now - _lastUpdateStartTime > _updateTimeout)
|
||||||
{
|
{
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
SafeUpdateTagList();
|
UpdateTagList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// No intentar escribir durante la actualización
|
// No intentar escribir durante la actualización
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Instance?.WriteInt32(pTag, pValue);
|
Instance?.WriteInt32(pTag, pValue);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -887,10 +835,10 @@ namespace LibS7Adv
|
||||||
{
|
{
|
||||||
_isUpdating = true;
|
_isUpdating = true;
|
||||||
_lastUpdateStartTime = DateTime.Now;
|
_lastUpdateStartTime = DateTime.Now;
|
||||||
|
|
||||||
// Iniciar actualización de tags de forma segura
|
// Iniciar actualización de tags
|
||||||
SafeUpdateTagList();
|
Task.Run(() => UpdateTagList());
|
||||||
|
|
||||||
PlcData.LastError = pTag + ": Tags no actualizados, reintentando...";
|
PlcData.LastError = pTag + ": Tags no actualizados, reintentando...";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue