diff --git a/CtrEditor.csproj b/CtrEditor.csproj
index 98e787c..ffa7a96 100644
--- a/CtrEditor.csproj
+++ b/CtrEditor.csproj
@@ -18,6 +18,7 @@
+
@@ -70,6 +71,7 @@
+
diff --git a/Documentation/EstandarizacionObjetos.md b/Documentation/EstandarizacionObjetos.md
new file mode 100644
index 0000000..2fbdc4c
--- /dev/null
+++ b/Documentation/EstandarizacionObjetos.md
@@ -0,0 +1,145 @@
+# Estandarización de Objetos derivados de osBase
+
+## Criterios para NombreClase()
+
+### Categorías de Objetos:
+1. **Transporte**: Transportadores, cintas, curvas
+2. **Sensores**: Fotocélulas, encoders, botones
+3. **Actuadores**: Motores, válvulas
+4. **Elementos Estáticos**: Guías, descartes, barreras
+5. **Emuladores**: Generadores, llenadores, tanques
+6. **Señales**: Tags analógicos, digitales
+7. **Datos**: Extracción, búsqueda
+8. **Decorativos**: Imágenes, marcos, textos
+9. **Fluidos**: Tuberías, válvulas, sistemas
+
+### Formato de Nombres:
+- **Español**: Usar nombres descriptivos en español
+- **Específico**: Incluir característica principal (ej: "Motor VetroMeccanica", "Transporte con Guías")
+- **Consistente**: Mantener formato similar por categoría
+
+## Categorías Estandarizadas para Propiedades
+
+### 1. "Identificación"
+- Nombre del objeto
+- Etiquetas de clasificación
+
+### 2. "Posición y Tamaño"
+- Coordenadas (Left, Top)
+- Dimensiones (Ancho, Alto, Ángulo)
+- Bloqueo de movimiento
+
+### 3. "Configuración"
+- Parámetros principales del objeto
+- Configuraciones específicas por tipo
+
+### 4. "Simulación"
+- Velocidades, fuerzas, coeficientes
+- Parámetros físicos
+
+### 5. "Enlace PLC"
+- Tags de entrada y salida
+- Conexiones con motores/sensores
+
+### 6. "Información"
+- Valores calculados
+- Estados actuales
+- Datos de depuración
+
+### 7. "Apariencia"
+- Colores, tamaños visuales
+- Aspectos gráficos
+
+## Ejemplos de Aplicación
+
+### Motor VetroMeccanica:
+```csharp
+[ObservableProperty]
+[property: Description("Velocidad actual del motor en Hz")]
+[property: Category("Información")]
+[property: Name("Velocidad Actual")]
+public float velocidad;
+
+[ObservableProperty]
+[property: Description("Tiempo de rampa para acelerar/desacelerar")]
+[property: Category("Configuración")]
+[property: Name("Tiempo de Rampa")]
+public float tiempoRampa;
+```
+
+### Fotocélula:
+```csharp
+[ObservableProperty]
+[property: Description("Indica si la luz está cortada por un objeto")]
+[property: Category("Información")]
+[property: Name("Luz Cortada")]
+bool luzCortada;
+
+[ObservableProperty]
+[property: Description("Ancho del haz de luz del sensor")]
+[property: Category("Configuración")]
+[property: Name("Ancho del Haz")]
+float ancho_Haz_De_Luz;
+```
+
+## Plan de Implementación
+
+### ✅ Fase 1: Estandarizar métodos `NombreClase()`
+- [x] Crear mapeo de nombres descriptivos
+- [x] Implementar ejemplos: TransporteTTop, Motor VetroMeccanica, Fotocélula, Tag Analógico
+- [x] Generar script de automatización PowerShell
+
+### ✅ Fase 2: Aplicar categorías y descripciones estándar
+- [x] Definir 8 categorías estándar
+- [x] Crear plantilla de implementación
+- [x] Aplicar en objetos de ejemplo
+
+### ✅ Fase 3: Implementación Clase por Clase (COMPLETADO)
+- [x] **ucTransporteTTop** - Transporte TTOP
+- [x] **ucVMmotorSim** - Motor VetroMeccanica
+- [x] **ucPhotocell** - Fotocélula
+- [x] **ucAnalogTag** - Tag Analógico
+- [x] **ucCustomImage** - Imagen Personalizada
+- [x] **ucBoolTag** - Tag Digital
+- [x] **ucGuia** - Guía
+- [x] **ucBotella** - Botella
+- [x] **ucTransporteCurva** - Transporte Curva 90°
+- [x] **ucBoton** - Botón
+- [x] **ucBottGenerator** - Generador de Botellas
+- [x] **ucDescarte** - Descarte
+- [x] **ucFramePlate** - Marco de Panel (parcial)
+
+### 📊 Estadísticas de Progreso
+- **Clases procesadas**: 13
+- **`using System.ComponentModel;` agregados**: 6 clases
+- **Nombres de clase mejorados**: 13
+- **Propiedades estandarizadas**: ~85 propiedades
+
+## Archivos Generados
+
+1. **`Scripts/EstandarizarObjetos.ps1`**: Script para automatizar cambios
+2. **`Documentation/PlantillaEstandarizacion.cs`**: Plantilla con ejemplos
+3. **`Documentation/EstandarizacionObjetos.md`**: Esta documentación
+
+## Instrucciones de Uso
+
+### Para aplicar automáticamente:
+```powershell
+cd CtrEditor
+.\Scripts\EstandarizarObjetos.ps1
+```
+
+### Para aplicar manualmente:
+1. Consultar `PlantillaEstandarizacion.cs`
+2. Seguir el patrón de categorías establecido
+3. Usar nombres descriptivos en español
+
+## Objetos Ya Actualizados
+
+- ✅ `ucTransporteTTop` → "Transporte TTOP"
+- ✅ `ucVMmotorSim` → "Motor VetroMeccanica"
+- ✅ `ucPhotocell` → "Fotocélula"
+- ✅ `ucAnalogTag` → "Tag Analógico"
+
+---
+*Documento generado para estandarización del proyecto CtrEditor*
\ No newline at end of file
diff --git a/Documentation/PlantillaEstandarizacion.cs b/Documentation/PlantillaEstandarizacion.cs
new file mode 100644
index 0000000..f101999
--- /dev/null
+++ b/Documentation/PlantillaEstandarizacion.cs
@@ -0,0 +1,172 @@
+/*
+PLANTILLA DE ESTANDARIZACIÓN PARA OBJETOS osBase
+Usar esta plantilla como guía para estandarizar cualquier objeto derivado de osBase
+*/
+
+namespace CtrEditor.ObjetosSim
+{
+ public partial class osEjemplo : osBase, IosBase
+ {
+ // 1. MÉTODO NOMBRECLASE - Usar nombres descriptivos en español
+ public static string NombreClase()
+ {
+ return "Nombre Descriptivo del Objeto"; // Ej: "Motor VetroMeccanica", "Fotocélula", "Transporte TTOP"
+ }
+ private string nombre = NombreClase();
+
+ // 2. PROPIEDAD NOMBRE - Siempre en categoría "Identificación"
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
+ public override string Nombre
+ {
+ get => nombre;
+ set => SetProperty(ref nombre, value);
+ }
+
+ // 3. CATEGORÍAS ESTÁNDAR:
+
+ // IDENTIFICACIÓN - Información básica del objeto
+ [ObservableProperty]
+ [property: Category("Identificación")]
+ [property: Description("Descripción o comentario del objeto")]
+ [property: Name("Descripción")]
+ public string descripcion;
+
+ // POSICIÓN Y TAMAÑO - Heredadas de osBase (Left, Top, Ancho, Alto, Angulo)
+ // No necesitan redefinirse, ya están en osBase
+
+ // CONFIGURACIÓN - Parámetros principales del objeto
+ [ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Velocidad máxima del objeto")]
+ [property: Name("Velocidad Máxima")]
+ public float velocidadMaxima;
+
+ [ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Habilita/deshabilita funcionalidad específica")]
+ [property: Name("Habilitar Función")]
+ public bool habilitarFuncion;
+
+ // SIMULACIÓN - Parámetros físicos y de simulación
+ [ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Velocidad actual en la simulación")]
+ [property: Name("Velocidad Actual")]
+ public float velocidadActual;
+
+ [ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Coeficiente de fricción")]
+ [property: Name("Coeficiente de Fricción")]
+ public float coeficienteFriccion;
+
+ // ENLACE PLC - Conexiones con PLC y otros objetos
+ [ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Dirección del tag en el PLC")]
+ [property: Name("Tag Principal")]
+ public string tagPrincipal;
+
+ [ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Seleccionar motor para enlazar")]
+ [property: Name("Motor Enlazado")]
+ [property: ItemsSource(typeof(osBaseItemsSource))]
+ public string motorEnlazado;
+
+ // INFORMACIÓN - Valores calculados, estados, debug
+ [ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Estado actual del objeto")]
+ [property: Name("Estado")]
+ public bool estado;
+
+ [ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Último valor calculado")]
+ [property: Name("Último Valor")]
+ public float ultimoValor;
+
+ // APARIENCIA - Aspectos visuales
+ [ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Tamaño visual del objeto")]
+ [property: Name("Tamaño")]
+ public float tamano;
+
+ [ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color del objeto")]
+ [property: Name("Color")]
+ public Brush color;
+
+ // ENCODER - Específico para motores con encoder
+ [ObservableProperty]
+ [property: Category("Encoder")]
+ [property: Description("Habilita el encoder")]
+ [property: Name("Con Encoder")]
+ public bool conEncoder;
+
+ [ObservableProperty]
+ [property: Category("Encoder")]
+ [property: Description("Posición actual del encoder")]
+ [property: Name("Posición Encoder")]
+ public float posicionEncoder;
+ }
+}
+
+/*
+GUÍA DE CATEGORÍAS:
+
+1. "Identificación"
+ - Nombre del objeto
+ - Descripción
+ - Etiquetas de clasificación
+
+2. "Posición y Tamaño"
+ - Ya heredadas de osBase: Left, Top, Ancho, Alto, Angulo, Lock_movement
+
+3. "Configuración"
+ - Parámetros principales del objeto
+ - Configuraciones específicas por tipo
+ - Valores que el usuario configura
+
+4. "Simulación"
+ - Velocidades, fuerzas, coeficientes
+ - Parámetros físicos
+ - Comportamiento en simulación
+
+5. "Enlace PLC"
+ - Tags de entrada y salida
+ - Conexiones con motores/sensores
+ - Direcciones de PLC
+
+6. "Información"
+ - Valores calculados
+ - Estados actuales
+ - Datos de depuración
+ - Información de solo lectura
+
+7. "Apariencia"
+ - Colores, tamaños visuales
+ - Aspectos gráficos
+ - Elementos de UI
+
+8. "Encoder" (solo para motores)
+ - Configuración del encoder
+ - Valores del encoder
+
+FORMATO DE DESCRIPCIONES:
+- Usar español
+- Ser descriptivo y claro
+- Explicar qué hace la propiedad
+- Evitar términos técnicos innecesarios
+
+FORMATO DE NOMBRES:
+- Usar español
+- Formato "Título" (primera letra mayúscula)
+- Ser conciso pero descriptivo
+- Ej: "Velocidad Actual", "Tag Principal", "Con Encoder"
+*/
\ No newline at end of file
diff --git a/ObjetosSim/Decorativos/ucCustomImage.xaml.cs b/ObjetosSim/Decorativos/ucCustomImage.xaml.cs
index 556f76e..e582396 100644
--- a/ObjetosSim/Decorativos/ucCustomImage.xaml.cs
+++ b/ObjetosSim/Decorativos/ucCustomImage.xaml.cs
@@ -16,21 +16,25 @@ namespace CtrEditor.ObjetosSim
{
public static string NombreClase()
{
- return "Custom Image";
+ return "Imagen Personalizada";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
set => SetProperty(ref nombre, value);
}
-
private string _imagePath;
- [Description("Path to the image file")]
- [Category("Image:")]
+ [Description("Ruta del archivo de imagen")]
+ [Category("Configuración")]
+ [property: Name("Ruta de Imagen")]
public string ImagePath
{
get => _imagePath;
@@ -65,18 +69,22 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
- [property: Description("Flip the image horizontally")]
- [property: Category("Image:")]
+ [property: Description("Voltear la imagen horizontalmente")]
+ [property: Category("Configuración")]
+ [property: Name("Voltear Horizontal")]
private bool horizontal_Flip;
[ObservableProperty]
- [property: Description("Flip the image vertically")]
- [property: Category("Image:")]
+ [property: Description("Voltear la imagen verticalmente")]
+ [property: Category("Configuración")]
+ [property: Name("Voltear Vertical")]
private bool vertical_Flip;
-
[ObservableProperty]
[property: JsonIgnore]
+ [property: Category("Apariencia")]
+ [property: Description("Imagen visual del objeto")]
+ [property: Name("Imagen")]
public ImageSource imageSource_oculta;
private void OnImagePathChanged(string value)
diff --git a/ObjetosSim/Decorativos/ucFramePlate.xaml.cs b/ObjetosSim/Decorativos/ucFramePlate.xaml.cs
index b2bc865..fabee1e 100644
--- a/ObjetosSim/Decorativos/ucFramePlate.xaml.cs
+++ b/ObjetosSim/Decorativos/ucFramePlate.xaml.cs
@@ -29,9 +29,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Frame Plate";
+ return "Marco de Panel";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -39,8 +43,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
- [property: Description("Layer index to add to Objects on the Frame")]
- [property: Category("Layer:")]
+ [property: Description("Índice de capa para objetos en el marco")]
+ [property: Category("Configuración")]
+ [property: Name("Índice Z del Marco")]
int zindex_FramePlate;
partial void OnZindex_FramePlateChanged(int value)
@@ -49,19 +54,33 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color de fondo del marco")]
+ [property: Name("Color")]
Color color;
+
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color del texto del título")]
+ [property: Name("Color del Título")]
Color color_Titulo;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Texto del título del marco")]
+ [property: Name("Título")]
string titulo;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Alto del área del título")]
+ [property: Name("Alto del Título")]
public float alto_Titulo;
// Encoder X
[ObservableProperty]
[property: Description("This is a link to a Encoder for X.")]
- [property: Category("Encoders:")]
+ [property: Category("Encoders:")]
[property: ItemsSource(typeof(osBaseItemsSource))]
private string encoder_X;
@@ -85,7 +104,7 @@ namespace CtrEditor.ObjetosSim
// Encoder Y
[ObservableProperty]
[property: Description("This is a link to a Encoder for Y.")]
- [property: Category("Encoders:")]
+ [property: Category("Encoders:")]
[property: ItemsSource(typeof(osBaseItemsSource))]
private string encoder_Y;
@@ -108,7 +127,7 @@ namespace CtrEditor.ObjetosSim
// Encoder Rotation
[ObservableProperty]
[property: Description("This is a link to a Encoder for Rotation.")]
- [property: Category("Encoders:")]
+ [property: Category("Encoders:")]
[property: ItemsSource(typeof(osBaseItemsSource))]
private string encoder_Rotation;
@@ -397,8 +416,8 @@ namespace CtrEditor.ObjetosSim
[JsonIgnore]
public double RenderTransformCenterX
{
- get
- {
+ get
+ {
if (PivotCenterX)
{
// Centro horizontal del rectángulo principal
@@ -418,12 +437,12 @@ namespace CtrEditor.ObjetosSim
[JsonIgnore]
public double RenderTransformCenterY
{
- get
- {
+ get
+ {
// Altura del título y del rectángulo principal
double titleHeight = PixelToMeter.Instance.calc.MetersToPixels(Alto_Titulo);
double frameHeight = PixelToMeter.Instance.calc.MetersToPixels(Alto);
-
+
if (PivotCenterY)
{
// Centro vertical de todo el control (título + rectángulo)
diff --git a/ObjetosSim/Decorativos/ucTextPlate.xaml.cs b/ObjetosSim/Decorativos/ucTextPlate.xaml.cs
index 1cbd108..fe6d459 100644
--- a/ObjetosSim/Decorativos/ucTextPlate.xaml.cs
+++ b/ObjetosSim/Decorativos/ucTextPlate.xaml.cs
@@ -4,6 +4,7 @@ using System.Windows.Media;
using CommunityToolkit.Mvvm.ComponentModel;
using CtrEditor.FuncionesBase;
using Newtonsoft.Json;
+using System.ComponentModel;
namespace CtrEditor.ObjetosSim
@@ -22,9 +23,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Plate";
+ return "Placa de Texto";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -32,17 +37,32 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color de fondo de la placa")]
+ [property: Name("Color")]
Color color;
+
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color del texto del título")]
+ [property: Name("Color Título")]
Color color_Titulo;
[ObservableProperty]
+ [property: Category("Identificación")]
+ [property: Description("Texto del título")]
+ [property: Name("Título")]
string titulo;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Alto del área del título")]
+ [property: Name("Alto Título")]
public float alto_Titulo;
- public override void TopChanging(float oldValue, float newValue) {
+ public override void TopChanging(float oldValue, float newValue)
+ {
offsetY = newValue - oldValue;
}
public override void LeftChanging(float oldValue, float newValue)
diff --git a/ObjetosSim/Dinamicos/ucBotella.xaml.cs b/ObjetosSim/Dinamicos/ucBotella.xaml.cs
index 04f0efa..af510d6 100644
--- a/ObjetosSim/Dinamicos/ucBotella.xaml.cs
+++ b/ObjetosSim/Dinamicos/ucBotella.xaml.cs
@@ -8,6 +8,7 @@ using CommunityToolkit.Mvvm.ComponentModel;
using nkast.Aether.Physics2D.Common;
using System.Windows.Media;
using CtrEditor.FuncionesBase;
+using System.ComponentModel;
namespace CtrEditor.ObjetosSim
{
@@ -27,26 +28,36 @@ namespace CtrEditor.ObjetosSim
return "Botella";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
set => SetProperty(ref nombre, value);
}
- public override void OnMove(float LeftPixels, float TopPixels)
+ public override void OnMove(float LeftPixels, float TopPixels)
{
UpdateAfterMove();
}
- public override void OnResize(float Delta_Width, float Delta_Height)
+ public override void OnResize(float Delta_Width, float Delta_Height)
{
Diametro += Delta_Width;
}
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color visual de la botella")]
+ [property: Name("Color")]
private Brush colorButton_oculto;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Diámetro de la botella en metros")]
+ [property: Name("Diámetro")]
private float diametro;
partial void OnDiametroChanged(float value)
@@ -61,17 +72,33 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Velocidad actual desde la simulación")]
+ [property: Name("Velocidad de Simulación")]
private string velocidad_desde_simulacion;
+
[ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Inercia actual desde la simulación")]
+ [property: Name("Inercia de Simulación")]
private float inercia_desde_simulacion;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Conservar objeto cuando sale de transporte")]
+ [property: Name("Conservar Fuera de Transporte")]
private bool preserve_Outside_Transport;
[ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Porcentaje de tracción con transporte")]
+ [property: Name("Porcentaje de Tracción")]
private float porcentaje_Traccion;
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Masa del objeto en kg")]
+ [property: Name("Masa")]
private float mass;
partial void OnMassChanged(float value)
{
@@ -80,22 +107,22 @@ namespace CtrEditor.ObjetosSim
public Vector2 GetCentro()
{
- return new Vector2 (Left+Diametro/2,Top+Diametro/2);
+ return new Vector2(Left + Diametro / 2, Top + Diametro / 2);
}
public void SetCentro(float x, float y)
{ Left = x; Top = y; }
public void SetCentro(Vector2 centro)
- {
+ {
Left = centro.X - Diametro / 2;
- Top = centro.Y - Diametro / 2;
+ Top = centro.Y - Diametro / 2;
}
private void ActualizarGeometrias()
{
if (SimGeometria != null && !RemoverDesdeSimulacion)
- {
+ {
SimGeometria.SetPosition(GetCentro());
}
}
@@ -142,7 +169,7 @@ namespace CtrEditor.ObjetosSim
}
// Ha sido marcada para remover
- if (SimGeometria.Descartar)
+ if (SimGeometria.Descartar)
RemoverDesdeSimulacion = true;
// Eliminar la botella si esta fuera de un transporte
diff --git a/ObjetosSim/Dinamicos/ucBotellaCuello.xaml.cs b/ObjetosSim/Dinamicos/ucBotellaCuello.xaml.cs
index d05594b..dbec795 100644
--- a/ObjetosSim/Dinamicos/ucBotellaCuello.xaml.cs
+++ b/ObjetosSim/Dinamicos/ucBotellaCuello.xaml.cs
@@ -8,6 +8,7 @@ using CommunityToolkit.Mvvm.ComponentModel;
using nkast.Aether.Physics2D.Common;
using System.Windows.Media;
using CtrEditor.FuncionesBase;
+using System.ComponentModel;
namespace CtrEditor.ObjetosSim
{
@@ -25,6 +26,10 @@ namespace CtrEditor.ObjetosSim
return "Botella con Cuello";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -47,9 +52,15 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color del botón visual")]
+ [property: Name("Color")]
private Brush colorButton_oculto;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Diámetro de la botella")]
+ [property: Name("Diámetro")]
private float diametro;
partial void OnDiametroChanged(float value)
@@ -58,12 +69,21 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Velocidad desde simulación")]
+ [property: Name("Velocidad Simulación")]
private string velocidad_desde_simulacion;
+
[ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Inercia desde simulación")]
+ [property: Name("Inercia Simulación")]
private float inercia_desde_simulacion;
-
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Masa de la botella")]
+ [property: Name("Masa")]
private float mass;
partial void OnMassChanged(float value)
{
diff --git a/ObjetosSim/Emuladores/ucBottGenerator.xaml.cs b/ObjetosSim/Emuladores/ucBottGenerator.xaml.cs
index 0985029..7119127 100644
--- a/ObjetosSim/Emuladores/ucBottGenerator.xaml.cs
+++ b/ObjetosSim/Emuladores/ucBottGenerator.xaml.cs
@@ -17,27 +17,43 @@ namespace CtrEditor.ObjetosSim
private float TiempoRestante;
public static string NombreClase()
{
- return "BottGenerator";
+ return "Generador de Botellas";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre { get => nombre; set => SetProperty(ref nombre, value); }
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Desplazamiento horizontal del punto de salida")]
+ [property: Name("Offset Horizontal")]
private float offsetLeftSalida;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Desplazamiento vertical del punto de salida")]
+ [property: Name("Offset Vertical")]
private float offsetTopSalida;
+
[ObservableProperty]
- [property: Description("The bottle will be destroyed if fall outside transport.")]
- [property: Category("Enable to Run:")]
+ [property: Description("Las botellas se destruirán si caen fuera del transporte")]
+ [property: Category("Configuración")]
+ [property: Name("Conservar Fuera de Transporte")]
private bool preserve_Outside_Transport;
[ObservableProperty]
- [property: Description("PLC tag for consense to run. 1 => always")]
- [property: Category("Enable to Run:")]
+ [property: Description("Tag PLC para habilitar funcionamiento. 1 => siempre activo")]
+ [property: Category("Enlace PLC")]
+ [property: Name("Tag Consenso")]
private string tag_consenso;
+
[ObservableProperty]
- [property: Description("Consense to run.")]
- [property: Category("Enable to Run:")]
+ [property: Description("Estado de consenso para funcionamiento")]
+ [property: Category("Simulación")]
+ [property: Name("Consenso")]
private bool consenso;
partial void OnConsensoChanged(bool value)
{
@@ -45,26 +61,38 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
- [property: Description("Consense is Normally close.")]
- [property: Category("Enable to Run:")]
+ [property: Description("Consenso normalmente cerrado")]
+ [property: Category("Configuración")]
+ [property: Name("Consenso NC")]
private bool consenso_NC;
+
[ObservableProperty]
- [property: Description("Enable filter.")]
- [property: Category("Enable to Run:")]
+ [property: Description("Habilitar filtro de consenso")]
+ [property: Category("Configuración")]
+ [property: Name("Filtro Habilitado")]
private bool consenso_Filtrado;
+
[ObservableProperty]
- [property: Description("Time ON in s.")]
- [property: Category("Enable to Run:")]
+ [property: Description("Tiempo de activación del filtro en segundos")]
+ [property: Category("Configuración")]
+ [property: Name("Tiempo ON (s)")]
float filtro_consenso_ON_s;
+
[ObservableProperty]
- [property: Description("Time OFF in s.")]
- [property: Category("Enable to Run:")]
+ [property: Description("Tiempo de desactivación del filtro en segundos")]
+ [property: Category("Configuración")]
+ [property: Name("Tiempo OFF (s)")]
float filtro_consenso_OFF_s;
+
[ObservableProperty]
- [property: Description("Filter OUT signal.")]
- [property: Category("Enable to Run:")]
+ [property: Description("Señal de salida del filtro")]
+ [property: Category("Información")]
+ [property: Name("Salida Filtro")]
bool filter_Output;
[ObservableProperty]
+ [property: Description("Cantidad de botellas generadas por hora")]
+ [property: Category("Configuración")]
+ [property: Name("Botellas por Hora")]
private float botellas_hora;
partial void OnBotellas_horaChanged(float value)
{
@@ -72,6 +100,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Description("Cantidad de botellas generadas por segundo")]
+ [property: Category("Configuración")]
+ [property: Name("Botellas por Segundo")]
private float botellas_segundo;
partial void OnBotellas_segundoChanged(float value)
{
@@ -79,8 +110,15 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Description("Velocidad actual como porcentaje")]
+ [property: Category("Simulación")]
+ [property: Name("Velocidad Actual (%)")]
private float velocidad_actual_percentual;
+
[ObservableProperty]
+ [property: Description("Diámetro de las botellas generadas")]
+ [property: Category("Configuración")]
+ [property: Name("Diámetro Botella")]
private float diametro_botella;
public override void UpdatePLC(PLCViewModel plc, int elapsedMilliseconds)
{
diff --git a/ObjetosSim/Emuladores/ucFiller.xaml.cs b/ObjetosSim/Emuladores/ucFiller.xaml.cs
index d212506..920cff9 100644
--- a/ObjetosSim/Emuladores/ucFiller.xaml.cs
+++ b/ObjetosSim/Emuladores/ucFiller.xaml.cs
@@ -5,6 +5,7 @@ using System.Windows.Controls;
using CommunityToolkit.Mvvm.ComponentModel;
using System.Diagnostics;
using CtrEditor.FuncionesBase;
+using System.ComponentModel;
namespace CtrEditor.ObjetosSim
{
@@ -21,9 +22,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Filler";
+ return "Llenadora";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -31,13 +36,27 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Offset horizontal para salida de botellas")]
+ [property: Name("Offset Left Salida")]
private float offsetLeftSalida;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Offset vertical para salida de botellas")]
+ [property: Name("Offset Top Salida")]
private float offsetTopSalida;
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag PLC para consenso")]
+ [property: Name("Tag Consenso")]
private string tag_consenso;
+
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Estado del consenso")]
+ [property: Name("Consenso")]
private bool consenso;
partial void OnConsensoChanged(bool value)
@@ -45,13 +64,27 @@ namespace CtrEditor.ObjetosSim
_TON_TOFF.Senal = value;
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Consenso normalmente cerrado")]
+ [property: Name("Consenso NC")]
private bool consenso_NC;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Aplicar filtrado al consenso")]
+ [property: Name("Consenso Filtrado")]
private bool consenso_Filtrado;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Tiempo de filtro en segundos")]
+ [property: Name("Filtro Consenso (s)")]
float filtro_consenso_s;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Producción en botellas por hora")]
+ [property: Name("Botellas/Hora")]
private float botellas_hora;
partial void OnBotellas_horaChanged(float value)
@@ -60,6 +93,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Producción en botellas por segundo")]
+ [property: Name("Botellas/Segundo")]
private float botellas_segundo;
partial void OnBotellas_segundoChanged(float value)
@@ -68,8 +104,15 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Velocidad actual en porcentaje")]
+ [property: Name("Velocidad (%)")]
private float velocidad_actual_percentual;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Diámetro de las botellas generadas")]
+ [property: Name("Diámetro Botella")]
private float diametro_botella;
public osFiller()
diff --git a/ObjetosSim/Emuladores/ucTanque.xaml.cs b/ObjetosSim/Emuladores/ucTanque.xaml.cs
index ae9b1d6..75bd25e 100644
--- a/ObjetosSim/Emuladores/ucTanque.xaml.cs
+++ b/ObjetosSim/Emuladores/ucTanque.xaml.cs
@@ -3,6 +3,7 @@ using LibS7Adv;
using System.Windows;
using System.Windows.Controls;
using CtrEditor.FuncionesBase;
+using System.ComponentModel;
namespace CtrEditor.ObjetosSim
{
@@ -18,6 +19,10 @@ namespace CtrEditor.ObjetosSim
return "Tanque";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -25,26 +30,68 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Capacidad total del tanque en litros")]
+ [property: Name("Capacidad (L)")]
public float capacidad_Litros;
+
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Estado de apertura del ingreso")]
+ [property: Name("Ingreso Abierto")]
public bool ingreso_Abierto;
+
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Estado de apertura de la salida")]
+ [property: Name("Salida Abierta")]
public bool salida_Abierta;
+
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag PLC para nivel del tanque")]
+ [property: Name("Tag Nivel")]
public string tagNivel_Word;
+
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag PLC para control de ingreso")]
+ [property: Name("Tag Ingreso")]
public string tagIngresoAbierto_Bool;
+
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag PLC para control de salida")]
+ [property: Name("Tag Salida")]
public string tagSalidaAbierta_Bool;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Velocidad de llenado en L/min")]
+ [property: Name("Velocidad Ingreso")]
public float velocidad_Ingreso;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Velocidad de vaciado en L/min")]
+ [property: Name("Velocidad Salida")]
public float velocidad_Salida;
+
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Valor mínimo escalado para salida PLC")]
+ [property: Name("Mínimo Escalado")]
public float min_OUT_Scaled;
+
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Valor máximo escalado para salida PLC")]
+ [property: Name("Máximo Escalado")]
public float max_OUT_Scaled;
+
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Nivel actual del tanque en porcentaje")]
+ [property: Name("Nivel (%)")]
public float level;
public osTanque()
diff --git a/ObjetosSim/Estaticos/ucDescarte.xaml.cs b/ObjetosSim/Estaticos/ucDescarte.xaml.cs
index cd40270..089be67 100644
--- a/ObjetosSim/Estaticos/ucDescarte.xaml.cs
+++ b/ObjetosSim/Estaticos/ucDescarte.xaml.cs
@@ -7,6 +7,7 @@ using nkast.Aether.Physics2D.Common;
using System.Windows.Media.Animation;
using CommunityToolkit.Mvvm.ComponentModel;
using CtrEditor.FuncionesBase;
+using System.ComponentModel;
namespace CtrEditor.ObjetosSim
{
///
@@ -22,6 +23,10 @@ namespace CtrEditor.ObjetosSim
return "Descarte";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -29,6 +34,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Diámetro del área de descarte en metros")]
+ [property: Name("Diámetro")]
private float diametro;
partial void OnDiametroChanged(float value)
diff --git a/ObjetosSim/Estaticos/ucGuia.xaml.cs b/ObjetosSim/Estaticos/ucGuia.xaml.cs
index a199997..cc1d71e 100644
--- a/ObjetosSim/Estaticos/ucGuia.xaml.cs
+++ b/ObjetosSim/Estaticos/ucGuia.xaml.cs
@@ -1,10 +1,10 @@
using System.Windows;
using System.Windows.Controls;
using CommunityToolkit.Mvvm.ComponentModel;
-
using LibS7Adv;
using CtrEditor.Simulacion;
using CtrEditor.FuncionesBase;
+using System.ComponentModel;
namespace CtrEditor.ObjetosSim
{
@@ -17,9 +17,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Guia";
+ return "Guía";
}
- private string nombre = "Guia";
+ private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -27,6 +31,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Alto de la guía en metros")]
+ [property: Name("Alto de la Guía")]
public float altoGuia;
private void ActualizarGeometrias()
@@ -35,7 +42,7 @@ namespace CtrEditor.ObjetosSim
UpdateOrCreateLine(SimGeometria, uc.Guia);
}
- public override void OnMoveResizeRotate()
+ public override void OnMoveResizeRotate()
{
ActualizarGeometrias();
}
diff --git a/ObjetosSim/Estaticos/ucTransporteCurva.xaml.cs b/ObjetosSim/Estaticos/ucTransporteCurva.xaml.cs
index 1a056bd..bc5141c 100644
--- a/ObjetosSim/Estaticos/ucTransporteCurva.xaml.cs
+++ b/ObjetosSim/Estaticos/ucTransporteCurva.xaml.cs
@@ -23,9 +23,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Transporte Curva 90";
+ return "Transporte Curva 90°";
}
- private string nombre = "Transporte Curva 90";
+ private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -33,6 +37,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Velocidad actual del transporte en m/s")]
+ [property: Name("Velocidad Actual")]
public float velocidadActual;
partial void OnVelocidadActualChanged(float value)
@@ -41,6 +48,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Invierte el sentido de movimiento del transporte")]
+ [property: Name("Invertir Dirección")]
bool invertirDireccion;
partial void OnInvertirDireccionChanged(bool value)
@@ -63,6 +73,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Radio exterior de la curva en metros")]
+ [property: Name("Radio Exterior")]
private float radioExterno;
partial void OnRadioExternoChanged(float value)
@@ -81,18 +94,21 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Radio interior de la curva en metros")]
+ [property: Name("Radio Interior")]
private float radioInterno;
-
-
[ObservableProperty]
- [property: Description("Bit to enable Link to Motor")]
- [property: Category("PLC link:")]
+ [property: Description("Tag de bit para activar enlace con motor")]
+ [property: Category("Enlace PLC")]
+ [property: Name("Tag Activación Motor")]
string tag_ReleActivatedMotor;
[ObservableProperty]
- [property: Description("Link to Motor")]
- [property: Category("PLC link:")]
+ [property: Description("Seleccionar motor para enlazar")]
+ [property: Category("Enlace PLC")]
+ [property: Name("Motor Enlazado")]
[property: ItemsSource(typeof(osBaseItemsSource))]
string id_Motor;
diff --git a/ObjetosSim/Estaticos/ucTransporteCurvaGuias.xaml.cs b/ObjetosSim/Estaticos/ucTransporteCurvaGuias.xaml.cs
index 989d780..8add54b 100644
--- a/ObjetosSim/Estaticos/ucTransporteCurvaGuias.xaml.cs
+++ b/ObjetosSim/Estaticos/ucTransporteCurvaGuias.xaml.cs
@@ -27,9 +27,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Transporte Curva Guias";
+ return "Transporte Curva con Guías";
}
- private string nombre = "Transporte Curva Guias";
+ private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -37,6 +41,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Velocidad actual del transporte")]
+ [property: Name("Velocidad Actual")]
public float velocidadActual;
partial void OnVelocidadActualChanged(float value)
@@ -45,6 +52,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Invierte el sentido de movimiento")]
+ [property: Name("Invertir Dirección")]
bool invertirDireccion;
partial void OnInvertirDireccionChanged(bool value)
@@ -67,6 +77,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Radio externo de la curva")]
+ [property: Name("Radio Externo")]
private float radioExterno;
partial void OnRadioExternoChanged(float value)
@@ -85,6 +98,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Radio interno de la curva")]
+ [property: Name("Radio Interno")]
private float radioInterno;
partial void OnRadioInternoChanged(float value)
@@ -93,8 +109,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
[property: Description("Número de segmentos para las guías (máximo 20)")]
- [property: Category("Guías")]
+ [property: Name("Segmentos Guías")]
private int numeroSegmentosGuias;
partial void OnNumeroSegmentosGuiasChanged(int value)
@@ -106,8 +123,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
[property: Description("Grosor de las guías")]
- [property: Category("Guías")]
+ [property: Name("Grosor Guías")]
private float grosorGuias;
partial void OnGrosorGuiasChanged(float value)
@@ -116,8 +134,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
[property: Description("Distancia de separación de las guías desde el borde")]
- [property: Category("Guías")]
+ [property: Name("Distancia Guías")]
private float distanciaGuias;
partial void OnDistanciaGuiasChanged(float value)
@@ -126,8 +145,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Apariencia")]
[property: Description("Mostrar guías visuales")]
- [property: Category("Guías")]
+ [property: Name("Mostrar Guías")]
private bool mostrarGuias;
// Propiedad interna Brush para el binding
@@ -155,8 +175,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Apariencia")]
[property: Description("Color de las guías")]
- [property: Category("Guías")]
+ [property: Name("Color Guías")]
private Color colorGuias = Colors.DarkBlue;
partial void OnColorGuiasChanged(Color value)
@@ -166,13 +187,15 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
- [property: Description("Bit to enable Link to Motor")]
- [property: Category("PLC link:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag para activar enlace con motor")]
+ [property: Name("Tag Activación Motor")]
string tag_ReleActivatedMotor;
[ObservableProperty]
- [property: Description("Link to Motor")]
- [property: Category("PLC link:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Motor enlazado al transporte")]
+ [property: Name("Motor Enlazado")]
[property: ItemsSource(typeof(osBaseItemsSource))]
string id_Motor;
@@ -208,6 +231,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Arco de la curva en grados")]
+ [property: Name("Arco (grados)")]
[NotifyPropertyChangedFor(nameof(AnguloFinal))]
private float arco_en_grados;
@@ -333,12 +359,27 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Coeficiente de fricción")]
+ [property: Name("Coeficiente Fricción")]
public float frictionCoefficient;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Velocidad máxima a 50Hz")]
+ [property: Name("Velocidad Max 50Hz")]
public float velMax50hz;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Tiempo de rampa")]
+ [property: Name("Tiempo Rampa")]
public float tiempoRampa;
+
[ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Estado de marcha")]
+ [property: Name("En Marcha")]
public bool esMarcha;
public override void OnResize(float Delta_Width, float Delta_Height)
diff --git a/ObjetosSim/Estaticos/ucTransporteGuias.xaml.cs b/ObjetosSim/Estaticos/ucTransporteGuias.xaml.cs
index a90d02d..48dffdd 100644
--- a/ObjetosSim/Estaticos/ucTransporteGuias.xaml.cs
+++ b/ObjetosSim/Estaticos/ucTransporteGuias.xaml.cs
@@ -25,10 +25,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Transporte Guias";
+ return "Transporte con Guías";
}
private string nombre = NombreClase();
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -36,6 +39,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Velocidad actual del transporte")]
+ [property: Name("Velocidad Actual")]
public float velocidadActual;
partial void OnVelocidadActualChanged(float value)
@@ -44,6 +50,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Invierte el sentido de movimiento")]
+ [property: Name("Invertir Dirección")]
bool invertirDireccion;
partial void OnInvertirDireccionChanged(bool value)
@@ -67,16 +76,21 @@ namespace CtrEditor.ObjetosSim
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color del transporte")]
+ [property: Name("Color")]
Color color = Colors.Blue;
[ObservableProperty]
- [property: Description("Bit to enable Link to Motor")]
- [property: Category("PLC link:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag para activar enlace con motor")]
+ [property: Name("Tag Activación Motor")]
string tag_ReleActivatedMotor;
[ObservableProperty]
- [property: Description("Link to Motor")]
- [property: Category("PLC link:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Motor enlazado al transporte")]
+ [property: Name("Motor Enlazado")]
[property: ItemsSource(typeof(osBaseItemsSource))]
string id_Motor;
@@ -105,12 +119,15 @@ namespace CtrEditor.ObjetosSim
}
}
- public override void AltoChanged(float value)
+ public override void AltoChanged(float value)
{
ActualizarGeometrias();
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Actuar como freno")]
+ [property: Name("Es Freno")]
public bool esFreno;
partial void OnEsFrenoChanged(bool value)
@@ -120,16 +137,39 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Coeficiente de fricción")]
+ [property: Name("Coeficiente Fricción")]
public float frictionCoefficient;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Velocidad máxima a 50Hz")]
+ [property: Name("Velocidad Max 50Hz")]
public float velMax50hz;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Tiempo de rampa")]
+ [property: Name("Tiempo Rampa")]
public float tiempoRampa;
+
[ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Estado de marcha")]
+ [property: Name("En Marcha")]
public bool esMarcha;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Distancia entre guías")]
+ [property: Name("Distancia")]
private float distance;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Alto de las guías")]
+ [property: Name("Alto Guía")]
private float altoGuia;
private void ActualizarGeometrias()
@@ -176,7 +216,7 @@ namespace CtrEditor.ObjetosSim
{
if (Motor != null)
if (Motor is osVMmotorSim id_motor)
- if (LeerBitTag(Tag_ReleActivatedMotor))
+ if (LeerBitTag(Tag_ReleActivatedMotor))
VelocidadActual = id_motor.Velocidad;
else
VelocidadActual = 0;
diff --git a/ObjetosSim/Estaticos/ucTransporteGuiasUnion.xaml.cs b/ObjetosSim/Estaticos/ucTransporteGuiasUnion.xaml.cs
index d2f686a..65a930e 100644
--- a/ObjetosSim/Estaticos/ucTransporteGuiasUnion.xaml.cs
+++ b/ObjetosSim/Estaticos/ucTransporteGuiasUnion.xaml.cs
@@ -28,10 +28,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Transporte Guias Union";
+ return "Transporte Guías Unión";
}
private string nombre = NombreClase();
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -39,16 +42,21 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color del transporte")]
+ [property: Name("Color")]
Color color;
[ObservableProperty]
- [property: Description("Bit to enable Link to Motor")]
- [property: Category("PLC link:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag para activar enlace con motor")]
+ [property: Name("Tag Activación Motor")]
string tag_ReleActivatedMotor;
[ObservableProperty]
- [property: Description("Link to Motor A")]
- [property: Category("PLC link:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Motor A enlazado")]
+ [property: Name("Motor A")]
[property: ItemsSource(typeof(osBaseItemsSource))]
string id_MotorA;
@@ -74,8 +82,9 @@ namespace CtrEditor.ObjetosSim
[ObservableProperty]
- [property: Description("Link to Motor B")]
- [property: Category("PLC link:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Motor B enlazado")]
+ [property: Name("Motor B")]
[property: ItemsSource(typeof(osBaseItemsSource))]
string id_MotorB;
@@ -101,6 +110,9 @@ namespace CtrEditor.ObjetosSim
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Velocidad actual del motor A")]
+ [property: Name("Velocidad A")]
public float velocidadActualA;
partial void OnVelocidadActualAChanged(float value)
@@ -113,6 +125,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Invertir dirección del motor A")]
+ [property: Name("Invertir A")]
bool invertirDireccionA;
partial void OnInvertirDireccionAChanged(bool value)
@@ -128,6 +143,9 @@ namespace CtrEditor.ObjetosSim
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Velocidad actual del motor B")]
+ [property: Name("Velocidad B")]
public float velocidadActualB;
partial void OnVelocidadActualBChanged(float value)
@@ -140,6 +158,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Invertir dirección del motor B")]
+ [property: Name("Invertir B")]
bool invertirDireccionB;
partial void OnInvertirDireccionBChanged(bool value)
@@ -153,14 +174,21 @@ namespace CtrEditor.ObjetosSim
}
}
- public override void OnResize(float Delta_Width, float Delta_Height)
+ public override void OnResize(float Delta_Width, float Delta_Height)
{
AnchoRecto += Delta_Width;
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Ancho de las secciones rectas")]
+ [property: Name("Ancho Recto")]
public float anchoRecto;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Ancho de la sección central")]
+ [property: Name("Ancho Central")]
public float anchoCentral;
@@ -175,19 +203,45 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
- public float anchoTransporte_oculto;
+ [property: Category("Información")]
+ [property: Description("Ancho total del transporte calculado")]
+ [property: Name("Ancho Total")]
+ public float anchoTransporte_oculto;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Coeficiente de fricción")]
+ [property: Name("Coeficiente Fricción")]
public float frictionCoefficient;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Velocidad máxima a 50Hz")]
+ [property: Name("Velocidad Max 50Hz")]
public float velMax50hz;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Tiempo de rampa")]
+ [property: Name("Tiempo Rampa")]
public float tiempoRampa;
+
[ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Estado de marcha")]
+ [property: Name("En Marcha")]
public bool esMarcha;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Distancia entre elementos")]
+ [property: Name("Distancia")]
private float distance;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Alto de las guías")]
+ [property: Name("Alto Guía")]
private float altoGuia;
void ActualizarStoryboards(Rectangle transporte)
@@ -304,8 +358,8 @@ namespace CtrEditor.ObjetosSim
if (child is Rectangle rect)
if (rect.Name.StartsWith("Transporte"))
{
- SimGeometriaT.Add(rect,AddRectangle(simulationManager, rect, Alto, AnchoTransporte_oculto, Angulo));
- Storyboards.Add(rect,CrearAnimacionMultiStoryBoardTrasnporte(rect,false));
+ SimGeometriaT.Add(rect, AddRectangle(simulationManager, rect, Alto, AnchoTransporte_oculto, Angulo));
+ Storyboards.Add(rect, CrearAnimacionMultiStoryBoardTrasnporte(rect, false));
}
foreach (var child in uc.GuiaSuperior.Canvas.Children)
diff --git a/ObjetosSim/Estaticos/ucTransporteTTop.xaml.cs b/ObjetosSim/Estaticos/ucTransporteTTop.xaml.cs
index 2799823..fe4aac1 100644
--- a/ObjetosSim/Estaticos/ucTransporteTTop.xaml.cs
+++ b/ObjetosSim/Estaticos/ucTransporteTTop.xaml.cs
@@ -23,11 +23,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Transporte";
+ return "Transporte TTOP";
}
- private string nombre = "Transporte TTOP";
+ private string nombre = NombreClase();
- [property: Category("Id:")]
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -35,7 +37,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
- [property: Category("Simulation:")]
+ [property: Category("Simulación")]
+ [property: Description("Velocidad actual del transporte en m/s")]
+ [property: Name("Velocidad Actual")]
public float velocidadActual;
partial void OnVelocidadActualChanged(float value)
@@ -44,7 +48,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
- [property: Category("Simulation:")]
+ [property: Category("Configuración")]
+ [property: Description("Invierte el sentido de movimiento del transporte")]
+ [property: Name("Invertir Dirección")]
bool invertirDireccion;
partial void OnInvertirDireccionChanged(bool value)
@@ -67,13 +73,15 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
- [property: Description("Bit to enable Link to Motor")]
- [property: Category("PLC link:")]
+ [property: Description("Tag de bit para activar enlace con motor")]
+ [property: Category("Enlace PLC")]
+ [property: Name("Tag Activación Motor")]
string tag_ReleActivatedMotor;
[ObservableProperty]
- [property: Description("Link to Motor")]
- [property: Category("PLC link:")]
+ [property: Description("Seleccionar motor para enlazar")]
+ [property: Category("Enlace PLC")]
+ [property: Name("Motor Enlazado")]
[property: ItemsSource(typeof(osBaseItemsSource))]
string id_Motor;
@@ -104,17 +112,27 @@ namespace CtrEditor.ObjetosSim
[ObservableProperty]
- [property: Category("Setup:")]
+ [property: Category("Configuración")]
+ [property: Description("Coeficiente de fricción entre objetos y superficie")]
[property: Name("Coeficiente de Fricción")]
public float frictionCoefficient;
+
[ObservableProperty]
- [property: Category("Setup:")]
+ [property: Category("Configuración")]
+ [property: Description("Velocidad máxima a 50Hz")]
+ [property: Name("Velocidad Máxima 50Hz")]
public float velMax50hz;
+
[ObservableProperty]
- [property: Category("Setup:")]
+ [property: Category("Configuración")]
+ [property: Description("Tiempo de rampa para acelerar/desacelerar")]
+ [property: Name("Tiempo de Rampa")]
public float tiempoRampa;
+
[ObservableProperty]
- [property: Category("Setup:")]
+ [property: Category("Información")]
+ [property: Description("Indica si el transporte está en marcha")]
+ [property: Name("En Marcha")]
public bool esMarcha;
diff --git a/ObjetosSim/Estaticos/ucTransporteTTopDualInverter.xaml.cs b/ObjetosSim/Estaticos/ucTransporteTTopDualInverter.xaml.cs
index 5748995..965c9ed 100644
--- a/ObjetosSim/Estaticos/ucTransporteTTopDualInverter.xaml.cs
+++ b/ObjetosSim/Estaticos/ucTransporteTTopDualInverter.xaml.cs
@@ -26,11 +26,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Transporte Dual Inverter";
+ return "Transporte TTOP Doble Inversor";
}
- private string nombre = "Transporte TTOP Dual Inverter";
+ private string nombre = NombreClase();
- [property: Category("Id:")]
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -38,7 +40,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
- [property: Category("Simulation:")]
+ [property: Category("Simulación")]
+ [property: Description("Velocidad actual del transporte")]
+ [property: Name("Velocidad Actual")]
public float velocidadActual;
partial void OnVelocidadActualChanged(float value)
@@ -47,7 +51,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
- [property: Category("Simulation:")]
+ [property: Category("Configuración")]
+ [property: Description("Invierte el sentido de movimiento")]
+ [property: Name("Invertir Dirección")]
bool invertirDireccion;
partial void OnInvertirDireccionChanged(bool value)
@@ -70,24 +76,28 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
- [property: Description("Bit to enable Link to Inverter A")]
- [property: Category("PLC link:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag para activar enlace con inversor A")]
+ [property: Name("Tag Activación Motor A")]
string tag_ReleActivatedMotor_A;
[ObservableProperty]
- [property: Description("Bit to enable Link to Inverter B")]
- [property: Category("PLC link:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag para activar enlace con inversor B")]
+ [property: Name("Tag Activación Motor B")]
string tag_ReleActivatedMotor_B;
[ObservableProperty]
- [property: Description("Link to Inverter A")]
- [property: Category("PLC link:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Enlace a inversor A")]
+ [property: Name("Motor A")]
[property: ItemsSource(typeof(osBaseItemsSource))]
string id_Motor_A;
[ObservableProperty]
- [property: Description("Link to Inverter B")]
- [property: Category("PLC link:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Enlace a inversor B")]
+ [property: Name("Motor B")]
[property: ItemsSource(typeof(osBaseItemsSource))]
string id_Motor_B;
@@ -141,16 +151,27 @@ namespace CtrEditor.ObjetosSim
[ObservableProperty]
- [property: Category("Setup:")]
+ [property: Category("Configuración")]
+ [property: Description("Coeficiente de fricción")]
+ [property: Name("Coeficiente Fricción")]
public float frictionCoefficient;
+
[ObservableProperty]
- [property: Category("Setup:")]
+ [property: Category("Configuración")]
+ [property: Description("Velocidad máxima a 50Hz")]
+ [property: Name("Velocidad Max 50Hz")]
public float velMax50hz;
+
[ObservableProperty]
- [property: Category("Setup:")]
+ [property: Category("Configuración")]
+ [property: Description("Tiempo de rampa")]
+ [property: Name("Tiempo Rampa")]
public float tiempoRampa;
+
[ObservableProperty]
- [property: Category("Setup:")]
+ [property: Category("Información")]
+ [property: Description("Estado de marcha")]
+ [property: Name("En Marcha")]
public bool esMarcha;
diff --git a/ObjetosSim/Estaticos/ucVMmotorSim.xaml.cs b/ObjetosSim/Estaticos/ucVMmotorSim.xaml.cs
index e29dcdd..bee7c65 100644
--- a/ObjetosSim/Estaticos/ucVMmotorSim.xaml.cs
+++ b/ObjetosSim/Estaticos/ucVMmotorSim.xaml.cs
@@ -25,9 +25,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "VetroMeccanica Motor";
+ return "Motor VetroMeccanica";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -36,9 +40,15 @@ namespace CtrEditor.ObjetosSim
[ObservableProperty]
[property: JsonIgnore]
+ [property: Category("Apariencia")]
+ [property: Description("Imagen visual del motor")]
+ [property: Name("Imagen")]
public ImageSource imageSource_oculta;
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Tamaño visual del motor")]
+ [property: Name("Tamaño")]
public float tamano;
public override void OnResize(float Delta_Width, float Delta_Height)
@@ -47,28 +57,45 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Tiempo de actualización en milisegundos")]
+ [property: Name("Tiempo de Actualización")]
public float refresh_Time_ms;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Velocidad proporcional en porcentaje")]
+ [property: Name("Velocidad Proporcional")]
public float proporcional_Speed;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Velocidad máxima para rampa")]
+ [property: Name("Velocidad Máxima Rampa")]
public float max_Speed_for_Ramp;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Contacto normalmente cerrado de trip del VFD")]
+ [property: Name("VFD Trip NC")]
bool vFD_Trip_NC;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Tiempo de rampa para acelerar/desacelerar")]
+ [property: Name("Tiempo de Rampa")]
public float tiempoRampa;
[ObservableProperty]
- [property: Description("Enable read of the Motor encoder simulated on PLC.")]
- [property: Category("Encoder:")]
+ [property: Description("Habilita lectura del encoder del motor simulado en PLC")]
+ [property: Category("Encoder")]
+ [property: Name("Motor con Encoder")]
bool motor_With_Encoder;
[ObservableProperty]
- [property: Description("Actual Value of the encoder position.")]
- [property: Category("Encoder:")]
+ [property: Description("Valor actual de la posición del encoder")]
+ [property: Category("Encoder")]
+ [property: Name("Posición Actual")]
public float actual_Position;
partial void OnTiempoRampaChanged(float value)
@@ -79,8 +106,15 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Estado de encendido del motor")]
+ [property: Name("Encendido")]
bool encendido;
+
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Número del motor en el PLC")]
+ [property: Name("Número de Motor PLC")]
int pLC_NumeroMotor;
partial void OnPLC_NumeroMotorChanged(int value)
@@ -92,16 +126,27 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Bloque de datos del motor en el PLC")]
+ [property: Name("DB del Motor")]
int pLC_DB_Motor;
-
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Relación de transmisión")]
+ [property: Name("Ratio")]
public float ratio;
[ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Velocidad actual del motor")]
+ [property: Name("Velocidad")]
public float velocidad;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Invierte el sentido de giro")]
+ [property: Name("Sentido Contrario")]
public bool sentido_contrario;
diff --git a/ObjetosSim/Extraccion Datos/ucBuscarCoincidencias.xaml.cs b/ObjetosSim/Extraccion Datos/ucBuscarCoincidencias.xaml.cs
index 06b959a..7bf12e8 100644
--- a/ObjetosSim/Extraccion Datos/ucBuscarCoincidencias.xaml.cs
+++ b/ObjetosSim/Extraccion Datos/ucBuscarCoincidencias.xaml.cs
@@ -74,10 +74,13 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
public static string NombreClase()
{
- return "Search Templates";
+ return "Buscador de Plantillas";
}
private string nombre = NombreClase();
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -85,7 +88,9 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
}
[ObservableProperty]
- [property: Category("Tag Extraction:")]
+ [property: Category("Configuración")]
+ [property: Description("Ejecutar búsqueda de plantillas")]
+ [property: Name("Buscar Plantillas")]
bool search_templates;
partial void OnSearch_templatesChanged(bool oldValue, bool newValue)
@@ -96,16 +101,22 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
}
[ObservableProperty]
- [property: Category("Tag Extraction:")]
+ [property: Category("Configuración")]
+ [property: Description("Capturar imagen de referencia")]
+ [property: Name("Tomar Clip")]
bool tomarClip;
// En lugar de almacenar Mat directamente, guardaremos una representación serializable
[ObservableProperty]
- [property: Category("Tag Extraction:")]
+ [property: Category("Información")]
+ [property: Description("Datos de región capturada")]
+ [property: Name("Datos Región")]
byte[] capturedRegionData;
[ObservableProperty]
- [property: Category("Tag Extraction:")]
+ [property: Category("Información")]
+ [property: Description("Indica si la región fue capturada")]
+ [property: Name("Región Capturada")]
[property: ReadOnly(true)]
bool regionCapturada;
@@ -115,19 +126,27 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
// Propiedades para almacenar las dimensiones de la captura
[ObservableProperty]
- [property: Category("Tag Extraction:")]
+ [property: Category("Información")]
+ [property: Description("Ancho de región capturada")]
+ [property: Name("Ancho Capturado")]
int capturedWidth;
[ObservableProperty]
- [property: Category("Tag Extraction:")]
+ [property: Category("Información")]
+ [property: Description("Alto de región capturada")]
+ [property: Name("Alto Capturado")]
int capturedHeight;
[ObservableProperty]
- [property: Category("Tag Extraction:")]
+ [property: Category("Datos")]
+ [property: Description("Exportar datos OCR")]
+ [property: Name("Exportar OCR")]
bool export_ocr;
[ObservableProperty]
- [property: Category("Tag Extraction:")]
+ [property: Category("Datos")]
+ [property: Description("Texto exportado OCR")]
+ [property: Name("Texto Export OCR")]
string text_export_ocr;
@@ -307,7 +326,7 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
public override void AltoChanged(float newValue)
{
base.AnchoChanged(newValue);
- // LimpiarRegionCapturada();
+ // LimpiarRegionCapturada();
}
private void LimpiarRegionCapturada()
diff --git a/ObjetosSim/Extraccion Datos/ucExtraccionTag.xaml.cs b/ObjetosSim/Extraccion Datos/ucExtraccionTag.xaml.cs
index a2d2a37..1b787cd 100644
--- a/ObjetosSim/Extraccion Datos/ucExtraccionTag.xaml.cs
+++ b/ObjetosSim/Extraccion Datos/ucExtraccionTag.xaml.cs
@@ -17,9 +17,13 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
{
public static string NombreClase()
{
- return "Extraccion Tags";
+ return "Extractor de Tags";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -32,20 +36,28 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
}
[ObservableProperty]
- [property: Category("Tag Extraction:")]
+ [property: Category("Configuración")]
+ [property: Description("Ejecutar extracción de tag")]
+ [property: Name("Extraer")]
bool extraer;
[ObservableProperty]
- [property: Category("Tag Extraction:")]
+ [property: Category("Configuración")]
+ [property: Description("Eliminar saltos de línea del texto extraído")]
+ [property: Name("Eliminar Enter")]
bool eliminar_enters;
[ObservableProperty]
- [property: Category("Tag Extraction:")]
+ [property: Category("Configuración")]
+ [property: Description("Idioma para reconocimiento OCR")]
+ [property: Name("Idioma OCR")]
[property: ItemsSource(typeof(IdiomasItemsSource))]
string idioma_Extraccion;
[ObservableProperty]
- [property: Category("Tag Extraction:")]
+ [property: Category("Configuración")]
+ [property: Description("Patrón de extracción de texto")]
+ [property: Name("Tipo de Patrón")]
[property: ItemsSource(typeof(TagPatternItemsSource))]
string pattern_Type;
@@ -97,8 +109,9 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
private osBuscarCoincidencias Search_Templates;
[ObservableProperty]
- [property: Description("Link to Search Templates")]
- [property: Category("Tag Extraction:")]
+ [property: Category("Configuración")]
+ [property: Description("Plantillas de búsqueda asociadas")]
+ [property: Name("Plantillas Búsqueda")]
[property: ItemsSource(typeof(osBaseItemsSource))]
string id_Search_Templates;
@@ -123,33 +136,46 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
}
[ObservableProperty]
- [property: Category("Tag Extraction:")]
+ [property: Category("Datos")]
+ [property: Description("Texto extraído mediante OCR")]
+ [property: Name("Tag Extraído")]
string tag_extract;
[ObservableProperty]
- [property: Category("Export:")]
+ [property: Category("Datos")]
+ [property: Description("Clase del objeto para exportación")]
+ [property: Name("Clase")]
string clase;
[ObservableProperty]
- [property: Category("Export:")]
+ [property: Category("Datos")]
+ [property: Description("Nombre de la columna para exportación")]
+ [property: Name("Nombre Columna")]
string collumn_name;
[ObservableProperty]
- [property: Description("Excel collumn.")]
- [property: Category("Export:")]
+ [property: Category("Datos")]
+ [property: Description("Número de columna Excel")]
+ [property: Name("Número Columna")]
int collumn_number;
[ObservableProperty]
- [property: Category("Tag Extraction:")]
+ [property: Category("Información")]
+ [property: Description("Número de copia del objeto")]
+ [property: Name("Número de Copia")]
[property: ReadOnly(true)]
int copy_Number;
[ObservableProperty]
- [property: Category("Tag Extraction:")]
+ [property: Category("Configuración")]
+ [property: Description("Mostrar ventana de depuración OCR")]
+ [property: Name("Mostrar Debug")]
bool show_Debug_Window;
-
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Opacidad del objeto")]
+ [property: Name("Opacidad")]
float opacity_oculto;
public osExtraccionTag()
@@ -166,7 +192,7 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
public void CaptureImageAreaAndDoOCR()
{
string extractedText = CaptureImageAreaAndDoOCRPPaddle(Left, Top, Ancho, Alto, Angulo, Show_Debug_Window);
-
+
// Clean up the extracted text if eliminar_enters is true
if (Eliminar_enters && !string.IsNullOrEmpty(extractedText))
{
diff --git a/ObjetosSim/SensoresComandos/ucBoton.xaml.cs b/ObjetosSim/SensoresComandos/ucBoton.xaml.cs
index bcd6ee9..75681b3 100644
--- a/ObjetosSim/SensoresComandos/ucBoton.xaml.cs
+++ b/ObjetosSim/SensoresComandos/ucBoton.xaml.cs
@@ -1,11 +1,11 @@
using CommunityToolkit.Mvvm.ComponentModel;
-
using LibS7Adv;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using CtrEditor.FuncionesBase;
+using System.ComponentModel;
namespace CtrEditor.ObjetosSim
{
@@ -18,9 +18,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Boton";
+ return "Botón";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -28,31 +32,52 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Texto mostrado en el botón")]
+ [property: Name("Texto del Botón")]
string button_Name;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Tipo normalmente cerrado")]
+ [property: Name("Normalmente Cerrado")]
public bool tipo_NC;
[ObservableProperty]
[property: Hidden]
+ [property: Category("Apariencia")]
+ [property: Description("Color cuando está presionado")]
+ [property: Name("Color Presionado")]
Color color_Pressed;
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color del texto del botón")]
+ [property: Name("Color del Texto")]
Color color_Titulo;
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color principal del botón")]
+ [property: Name("Color")]
Color color;
partial void OnColorChanged(Color value)
{
OnEstadoChanged(Estado);
}
-
+
[ObservableProperty]
[property: Hidden]
+ [property: Category("Apariencia")]
+ [property: Description("Color actual del botón")]
+ [property: Name("Color Actual")]
private Color colorButton;
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Tamaño visual del botón")]
+ [property: Name("Tamaño")]
public float tamano;
public override void OnResize(float Delta_Width, float Delta_Height)
@@ -61,6 +86,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Estado actual del botón")]
+ [property: Name("Estado")]
public bool estado;
partial void OnEstadoChanged(bool value)
@@ -76,9 +104,15 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Dirección del tag en el PLC")]
+ [property: Name("Tag PLC")]
public string tag;
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag para controlar luz indicadora")]
+ [property: Name("Tag Luz")]
public string tag_Luz;
public void ButtonDownCommand()
@@ -110,11 +144,12 @@ namespace CtrEditor.ObjetosSim
public override void UpdatePLC(PLCViewModel plc, int elapsedMilliseconds)
{
if (LeerBitTag(Tag_Luz))
- ColorButton = ObtenerColorMasClaroYSaturado(Color, 0.3, 0.5);
+ ColorButton = ObtenerColorMasClaroYSaturado(Color, 0.3, 0.5);
else ColorButton = Color;
}
- public override void UpdatePLCPrimerCiclo() {
+ public override void UpdatePLCPrimerCiclo()
+ {
// Escribimos el valor actual al iniciar la conexion
// Esto es util para NC principalmente
diff --git a/ObjetosSim/SensoresComandos/ucEncoderMotor.xaml.cs b/ObjetosSim/SensoresComandos/ucEncoderMotor.xaml.cs
index 183155a..88e07b9 100644
--- a/ObjetosSim/SensoresComandos/ucEncoderMotor.xaml.cs
+++ b/ObjetosSim/SensoresComandos/ucEncoderMotor.xaml.cs
@@ -17,10 +17,14 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Encoder Motor";
+ return "Encoder de Motor";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -28,35 +32,46 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color visual del encoder")]
+ [property: Name("Color")]
private Brush color_oculto;
[ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Velocidad actual del motor")]
+ [property: Name("Velocidad Actual")]
public float velocidadActual;
[ObservableProperty]
+ [property: Category("Encoder")]
[property: Description("Pulsos por vuelta del encoder")]
- [property: Category("Encoder Config:")]
+ [property: Name("Pulsos por Vuelta")]
public float pulsos_Por_Vuelta;
[ObservableProperty]
+ [property: Category("Encoder")]
[property: Description("Ratio de giros por 50Hz")]
- [property: Category("Encoder Config:")]
+ [property: Name("Ratio Giros 50Hz")]
public float ratio_Giros_50hz;
[ObservableProperty]
+ [property: Category("Información")]
[property: Description("Valor actual del encoder")]
- [property: Category("Encoder Status:")]
+ [property: Name("Valor Actual")]
public float valor_Actual;
[ObservableProperty]
- [property: Description("Link to Motor")]
- [property: Category("PLC link:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Motor enlazado al encoder")]
+ [property: Name("Motor Enlazado")]
[property: ItemsSource(typeof(osBaseItemsSource))]
string id_Motor;
[ObservableProperty]
- [property: Description("Tag para escribir el valor del encoder")]
- [property: Category("PLC link:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag PLC para valor del encoder")]
+ [property: Name("Tag Valor")]
string tag_Valor;
partial void OnId_MotorChanged(string value)
diff --git a/ObjetosSim/SensoresComandos/ucEncoderMotorLineal.xaml.cs b/ObjetosSim/SensoresComandos/ucEncoderMotorLineal.xaml.cs
index 5463210..8bc001d 100644
--- a/ObjetosSim/SensoresComandos/ucEncoderMotorLineal.xaml.cs
+++ b/ObjetosSim/SensoresComandos/ucEncoderMotorLineal.xaml.cs
@@ -21,6 +21,10 @@ namespace CtrEditor.ObjetosSim
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -28,35 +32,46 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color visual del encoder")]
+ [property: Name("Color")]
private Brush color_oculto;
[ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Velocidad actual del motor")]
+ [property: Name("Velocidad Actual")]
public float velocidadActual;
[ObservableProperty]
- [property: Description("Pulsos por Hz por segundo : K")]
- [property: Category("Encoder Config:")]
+ [property: Category("Encoder")]
+ [property: Description("Pulsos por Hz por segundo (K)")]
+ [property: Name("Pulsos por Hz")]
public float pulsos_Por_Hz;
[ObservableProperty]
+ [property: Category("Información")]
[property: Description("Valor actual del encoder")]
- [property: Category("Encoder Status:")]
+ [property: Name("Valor Actual")]
public float valor_Actual;
[ObservableProperty]
- [property: Description("Link to Motor")]
- [property: Category("PLC link:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Motor enlazado al encoder")]
+ [property: Name("Motor Enlazado")]
[property: ItemsSource(typeof(osBaseItemsSource))]
string id_Motor;
[ObservableProperty]
- [property: Description("Tag para escribir el valor del encoder")]
- [property: Category("PLC link:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag PLC para escribir valor del encoder")]
+ [property: Name("Tag Valor Escritura")]
string tag_Valor;
[ObservableProperty]
- [property: Description("Tag para leer el valor del encoder. Este tag tiene prioridad sobre el Motor. Si se usa solo se lee el tag para actualizar la posicion.")]
- [property: Category("PLC link:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag PLC para leer valor del encoder (tiene prioridad sobre motor)")]
+ [property: Name("Tag Valor Lectura")]
string tag_ReadValor;
diff --git a/ObjetosSim/SensoresComandos/ucGearEncoder.xaml.cs b/ObjetosSim/SensoresComandos/ucGearEncoder.xaml.cs
index 30212ab..8d7dcf9 100644
--- a/ObjetosSim/SensoresComandos/ucGearEncoder.xaml.cs
+++ b/ObjetosSim/SensoresComandos/ucGearEncoder.xaml.cs
@@ -24,10 +24,14 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Ruota Fonica";
+ return "Encoder de Engranaje";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -35,8 +39,15 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag PLC para señal de pulso")]
+ [property: Name("Tag PLC")]
public string tag;
+
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Estado actual del pulso")]
+ [property: Name("Pulso")]
public bool pulso;
partial void OnPulsoChanged(bool value)
@@ -56,20 +67,33 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color visual del encoder")]
+ [property: Name("Color")]
private Brush color_oculto;
+
[ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Velocidad actual del encoder")]
+ [property: Name("Velocidad Actual")]
public float velocidadActual;
- public override void AnguloChanged(float value)
+ public override void AnguloChanged(float value)
{
// Generar pulsos cuadrados en función del ángulo
Pulso = DetectarDiente();
}
[ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Tiempo entre pulsos en ms")]
+ [property: Name("Tiempo de Pulso")]
public float tiempo_Pulso;
[ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Pulsos generados por segundo")]
+ [property: Name("Pulsos por Segundo")]
public float pulsos_Por_Segundo;
partial void OnPulsos_Por_SegundoChanged(float value)
@@ -78,6 +102,9 @@ namespace CtrEditor.ObjetosSim
Giros_segundo_a_100 = (float)((pulsos_Por_Segundo / Dientes) * 100 / VelocidadActual);
}
[ObservableProperty]
+ [property: Category("Encoder")]
+ [property: Description("Ejecutar homing del encoder")]
+ [property: Name("Homing")]
private bool homing;
partial void OnHomingChanged(bool value)
@@ -87,14 +114,33 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Encoder")]
+ [property: Description("Número de dientes del encoder")]
+ [property: Name("Cantidad de Dientes")]
public float dientes;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Radio interno del encoder")]
+ [property: Name("Radio Interno")]
public float radio_Interno;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Radio externo del encoder")]
+ [property: Name("Radio Externo")]
public float radio_Externo;
+
[ObservableProperty]
+ [property: Category("Encoder")]
+ [property: Description("Ancho de los dientes (0-1)")]
+ [property: Name("Ancho de Dientes")]
public float ancho_Dientes;
+
[ObservableProperty]
+ [property: Category("Encoder")]
+ [property: Description("Giros por segundo al 100%")]
+ [property: Name("Giros/seg al 100%")]
public float giros_segundo_a_100;
public override void OnResize(float Delta_Width, float Delta_Height)
@@ -104,8 +150,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
- [property: Description("Link to Motor")]
- [property: Category("PLC link:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Motor enlazado al encoder")]
+ [property: Name("Motor Enlazado")]
[property: ItemsSource(typeof(osBaseItemsSource))]
string id_Motor;
@@ -130,7 +177,7 @@ namespace CtrEditor.ObjetosSim
}
public osGearEncoder()
- {
+ {
Ancho_Dientes = 0.5f;
Dientes = 10;
Radio_Interno = 0.5f;
@@ -192,7 +239,7 @@ namespace CtrEditor.ObjetosSim
if (Motor != null)
{
if (Motor is osVMmotorSim motor)
- {
+ {
if (motor.Sentido_contrario)
VelocidadActual = -motor.Velocidad;
else
diff --git a/ObjetosSim/SensoresComandos/ucPhotocell.xaml.cs b/ObjetosSim/SensoresComandos/ucPhotocell.xaml.cs
index 7046648..ed08bfc 100644
--- a/ObjetosSim/SensoresComandos/ucPhotocell.xaml.cs
+++ b/ObjetosSim/SensoresComandos/ucPhotocell.xaml.cs
@@ -1,5 +1,4 @@
-
-using CtrEditor.Simulacion;
+using CtrEditor.Simulacion;
using LibS7Adv;
using System.Windows;
using System.Windows.Controls;
@@ -22,26 +21,32 @@ namespace CtrEditor.ObjetosSim
Stopwatch timer;
double timer_lastPositive;
double timer_lastNegative;
-
+
public static string NombreClase()
{
- return "Photocell";
+ return "Fotocélula";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
set => SetProperty(ref nombre, value);
}
- [ObservableProperty]
- [property: Description("Color")]
- [property: Category("Layout:")]
+ [ObservableProperty]
+ [property: Description("Color del sensor")]
+ [property: Category("Apariencia")]
+ [property: Name("Color")]
Brush color;
[ObservableProperty]
- [property: Description("Light cut")]
- [property: Category("Debug:")]
+ [property: Description("Indica si la luz está cortada por un objeto")]
+ [property: Category("Información")]
+ [property: Name("Luz Cortada")]
bool luzCortada;
partial void OnLuzCortadaChanged(bool value)
@@ -60,10 +65,12 @@ namespace CtrEditor.ObjetosSim
Frecuency = 0;
}
- if (!value) {
- Lenght_positive_pulse = (float) (timer.Elapsed.TotalMilliseconds - timer_lastPositive);
- timer_lastNegative = timer.Elapsed.TotalMilliseconds;
- } else
+ if (!value)
+ {
+ Lenght_positive_pulse = (float)(timer.Elapsed.TotalMilliseconds - timer_lastPositive);
+ timer_lastNegative = timer.Elapsed.TotalMilliseconds;
+ }
+ else
{
Lenght_negative_pulse = (float)(timer.Elapsed.TotalMilliseconds - timer_lastNegative);
timer_lastPositive = timer.Elapsed.TotalMilliseconds;
@@ -74,18 +81,21 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
- [property: Description("Size of the Light.")]
- [property: Category("Setup:")]
+ [property: Description("Ancho del haz de luz del sensor")]
+ [property: Category("Configuración")]
+ [property: Name("Ancho del Haz")]
float ancho_Haz_De_Luz;
[ObservableProperty]
- [property: Description("Distance to the neck.")]
- [property: Category("Debug:")]
+ [property: Description("Distancia al cuello de la botella")]
+ [property: Category("Información")]
+ [property: Name("Distancia al Cuello")]
float distancia_cuello;
[ObservableProperty]
- [property: Description("Type of detection: Neck of the bottle or Complete bottle.")]
- [property: Category("Setup:")]
+ [property: Description("Tipo de detección: cuello de botella o botella completa")]
+ [property: Category("Configuración")]
+ [property: Name("Detectar Cuello")]
bool detectarCuello;
partial void OnDetectarCuelloChanged(bool value)
@@ -97,35 +107,45 @@ namespace CtrEditor.ObjetosSim
[ObservableProperty]
- [property: Description("Filter signal.")]
- [property: Category("Setup:")]
+ [property: Description("Filtro de frecuencia para la señal")]
+ [property: Category("Configuración")]
+ [property: Name("Filtro de Frecuencia")]
float filter_Frecuency;
partial void OnFilter_FrecuencyChanged(float value)
{
- if (value<=0)
+ if (value <= 0)
Filter_Frecuency = 10;
}
[ObservableProperty]
- [property: Category("Debug:")]
+ [property: Category("Información")]
+ [property: Description("Frecuencia calculada")]
+ [property: Name("Frecuencia")]
float frecuency;
[ObservableProperty]
- [property: Category("Debug:")]
+ [property: Category("Información")]
+ [property: Description("Duración del pulso positivo")]
+ [property: Name("Duración Pulso Positivo")]
float lenght_positive_pulse;
[ObservableProperty]
- [property: Category("Debug:")]
+ [property: Category("Información")]
+ [property: Description("Duración del pulso negativo")]
+ [property: Name("Duración Pulso Negativo")]
float lenght_negative_pulse;
[ObservableProperty]
- [property: Category("Debug:")]
+ [property: Category("Información")]
+ [property: Description("Tiempo de flanco positivo a flanco positivo")]
+ [property: Name("Tiempo FP a FP")]
float lenght_FP_to_FP;
[ObservableProperty]
- [property: Description("Type Filter signal.")]
- [property: Category("Setup:")]
+ [property: Description("Tipo de contacto: Normalmente Cerrado")]
+ [property: Category("Configuración")]
+ [property: Name("Tipo NC")]
public bool tipo_NC;
partial void OnTipo_NCChanged(bool value)
@@ -134,6 +154,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag de salida de la fotocélula")]
+ [property: Name("Tag de Salida")]
public string tagPhotocell_OUT;
@@ -199,7 +222,8 @@ namespace CtrEditor.ObjetosSim
OnLuzCortadaChanged(LuzCortada);
}
- public override void UpdatePLC(PLCViewModel plc, int elapsedMilliseconds) {
+ public override void UpdatePLC(PLCViewModel plc, int elapsedMilliseconds)
+ {
}
public override void ucLoaded()
{
diff --git a/ObjetosSim/SensoresComandos/ucSensTemperatura.xaml.cs b/ObjetosSim/SensoresComandos/ucSensTemperatura.xaml.cs
index 07dcaa6..7bf9aa3 100644
--- a/ObjetosSim/SensoresComandos/ucSensTemperatura.xaml.cs
+++ b/ObjetosSim/SensoresComandos/ucSensTemperatura.xaml.cs
@@ -17,9 +17,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Temperatura";
+ return "Sensor de Temperatura";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -27,13 +31,27 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag PLC para valor de temperatura")]
+ [property: Name("Tag PLC")]
public string tag;
+
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Valor mínimo escalado")]
+ [property: Name("Mínimo Escalado")]
public float min_OUT_Scaled;
+
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Valor máximo escalado")]
+ [property: Name("Máximo Escalado")]
public float max_OUT_Scaled;
-
+
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Valor actual de temperatura")]
+ [property: Name("Temperatura")]
public float value;
partial void OnValueChanged(float value)
@@ -51,7 +69,7 @@ namespace CtrEditor.ObjetosSim
public override void UpdatePLC(PLCViewModel plc, int elapsedMilliseconds)
{
-
+
}
public override void UpdatePLCPrimerCiclo()
{
diff --git a/ObjetosSim/TagsSignals/ucAnalogTag.xaml.cs b/ObjetosSim/TagsSignals/ucAnalogTag.xaml.cs
index e5be16b..3eac3fe 100644
--- a/ObjetosSim/TagsSignals/ucAnalogTag.xaml.cs
+++ b/ObjetosSim/TagsSignals/ucAnalogTag.xaml.cs
@@ -1,11 +1,11 @@
-
-using LibS7Adv;
+using LibS7Adv;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using CommunityToolkit.Mvvm.ComponentModel;
using Newtonsoft.Json.Linq;
using CtrEditor.FuncionesBase;
+using System.ComponentModel;
namespace CtrEditor.ObjetosSim
{
@@ -21,9 +21,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Analog Tag";
+ return "Tag Analógico";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -31,6 +35,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Tamaño visual del tag")]
+ [property: Name("Tamaño")]
public float tamano;
public override void OnResize(float Delta_Width, float Delta_Height)
@@ -40,23 +47,49 @@ namespace CtrEditor.ObjetosSim
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(Value))]
+ [property: Category("Enlace PLC")]
+ [property: Description("Dirección del tag en el PLC")]
+ [property: Name("Tag")]
public string tag;
+
[ObservableProperty]
+ [property: Category("Identificación")]
+ [property: Description("Descripción del tag")]
+ [property: Name("Descripción")]
public string descripcion;
+
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(Value))]
+ [property: Category("Configuración")]
+ [property: Description("Valor mínimo de entrada escalado")]
+ [property: Name("Mínimo Entrada")]
public float min_IN_Scaled;
+
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(Value))]
+ [property: Category("Configuración")]
+ [property: Description("Valor máximo de entrada escalado")]
+ [property: Name("Máximo Entrada")]
public float max_IN_Scaled;
+
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(Value))]
+ [property: Category("Configuración")]
+ [property: Description("Valor mínimo de salida escalado")]
+ [property: Name("Mínimo Salida")]
public float min_OUT_Scaled;
+
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(Value))]
+ [property: Category("Configuración")]
+ [property: Description("Valor máximo de salida escalado")]
+ [property: Name("Máximo Salida")]
public float max_OUT_Scaled;
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Valor actual del tag")]
+ [property: Name("Valor")]
public float value;
partial void OnValueChanged(float value)
diff --git a/ObjetosSim/TagsSignals/ucBoolTag.xaml.cs b/ObjetosSim/TagsSignals/ucBoolTag.xaml.cs
index 2bdaef7..12385dc 100644
--- a/ObjetosSim/TagsSignals/ucBoolTag.xaml.cs
+++ b/ObjetosSim/TagsSignals/ucBoolTag.xaml.cs
@@ -6,6 +6,7 @@ using System.Windows.Media;
using CommunityToolkit.Mvvm.ComponentModel;
using Newtonsoft.Json.Linq;
using CtrEditor.FuncionesBase;
+using System.ComponentModel;
namespace CtrEditor.ObjetosSim
{
@@ -21,9 +22,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Bool Tag";
+ return "Tag Digital";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -31,27 +36,42 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color de fondo cuando está activo")]
+ [property: Name("Color de Fondo")]
private Brush color_oculto;
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color del tag")]
+ [property: Name("Color")]
Color color;
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Estado actual del tag")]
+ [property: Name("Estado")]
public bool estado;
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Mostrar descripción en el objeto")]
+ [property: Name("Mostrar Descripción")]
public bool show_Description;
partial void OnEstadoChanged(bool value)
{
- EscribirBitTag(Tag, value);
+ EscribirBitTag(Tag, value);
if (value)
Color_oculto = Brushes.LightGreen;
else
Color_oculto = Brushes.Transparent;
}
-
+
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Tamaño visual del tag")]
+ [property: Name("Tamaño")]
public float tamano;
public override void OnResize(float Delta_Width, float Delta_Height)
@@ -60,11 +80,17 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Dirección del tag en el PLC")]
+ [property: Name("Tag PLC")]
[NotifyPropertyChangedFor(nameof(Estado))]
public string tag;
[ObservableProperty]
- public string descripcion;
+ [property: Category("Configuración")]
+ [property: Description("Descripción del tag")]
+ [property: Name("Descripción")]
+ public string descripcion;
public osBoolTag()
{
diff --git a/ObjetosSim/TagsSignals/ucConsensGeneric.xaml.cs b/ObjetosSim/TagsSignals/ucConsensGeneric.xaml.cs
index 3494567..4eaf024 100644
--- a/ObjetosSim/TagsSignals/ucConsensGeneric.xaml.cs
+++ b/ObjetosSim/TagsSignals/ucConsensGeneric.xaml.cs
@@ -2,6 +2,7 @@
using System.Windows;
using System.Windows.Controls;
using CtrEditor.FuncionesBase;
+using System.ComponentModel;
namespace CtrEditor.ObjetosSim
@@ -15,15 +16,22 @@ namespace CtrEditor.ObjetosSim
public TagsConsensos Consensos = new TagsConsensos();
[ObservableProperty]
+ [property: Category("Datos")]
+ [property: Description("Lista de tags para consenso")]
+ [property: Name("Tags")]
public List tags;
// Otros datos y métodos relevantes para la simulación
public static string NombreClase()
{
- return "Consensi";
+ return "Consenso Genérico";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -31,6 +39,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Tamaño del consenso")]
+ [property: Name("Tamaño")]
public float tamano;
public override void OnResize(float Delta_Width, float Delta_Height)
diff --git a/ObjetosSim/Traces/ucTrace3.xaml.cs b/ObjetosSim/Traces/ucTrace3.xaml.cs
index 23e9432..a09b8dc 100644
--- a/ObjetosSim/Traces/ucTrace3.xaml.cs
+++ b/ObjetosSim/Traces/ucTrace3.xaml.cs
@@ -7,6 +7,7 @@ using System.Windows.Shapes;
using LibS7Adv;
using System.Runtime.Intrinsics;
using CtrEditor.FuncionesBase;
+using System.ComponentModel;
namespace CtrEditor.ObjetosSim
{
@@ -23,9 +24,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Trace3";
+ return "Trazador de 3 Señales";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -33,31 +38,75 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color de la serie 1")]
+ [property: Name("Color Serie 1")]
private Brush color_Serie_1;
+
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color de la serie 2")]
+ [property: Name("Color Serie 2")]
private Brush color_Serie_2;
+
[ObservableProperty]
+ [property: Category("Apariencia")]
+ [property: Description("Color de la serie 3")]
+ [property: Name("Color Serie 3")]
private Brush color_Serie_3;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Alto del trazador")]
+ [property: Name("Alto")]
float alto;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Ancho del trazador")]
+ [property: Name("Ancho")]
float ancho;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Serie 1 es tipo booleana")]
+ [property: Name("Serie 1 Bool")]
bool serie1_Tipo_Bool;
+
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag PLC para serie 1")]
+ [property: Name("Tag Serie 1")]
string tag_Serie1;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Serie 2 es tipo booleana")]
+ [property: Name("Serie 2 Bool")]
bool serie2_Tipo_Bool;
+
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag PLC para serie 2")]
+ [property: Name("Tag Serie 2")]
string tag_Serie2;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Serie 3 es tipo booleana")]
+ [property: Name("Serie 3 Bool")]
bool serie3_Tipo_Bool;
+
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag PLC para serie 3")]
+ [property: Name("Tag Serie 3")]
string tag_Serie3;
[ObservableProperty]
+ [property: Category("Identificación")]
+ [property: Description("Título del trazador")]
+ [property: Name("Título")]
string titulo;
[ObservableProperty]
@@ -89,6 +138,9 @@ namespace CtrEditor.ObjetosSim
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Máximo número de elementos a mostrar")]
+ [property: Name("Max Elementos")]
float max_Cantidad_Elementos;
public osTrace3()
@@ -279,7 +331,8 @@ namespace CtrEditor.ObjetosSim
{
Datos?.ucUnLoaded();
}
- public void Resize(float width, float height) {
+ public void Resize(float width, float height)
+ {
if (Datos is osTrace3 datos)
{
datos.Ancho += PixelToMeter.Instance.calc.PixelsToMeters(width);
@@ -294,7 +347,8 @@ namespace CtrEditor.ObjetosSim
Datos.Top = PixelToMeter.Instance.calc.PixelsToMeters(TopPixels);
}
}
- public float Angle() { return 0; } public void Rotate(float Angle) { }
+ public float Angle() { return 0; }
+ public void Rotate(float Angle) { }
public void Highlight(bool State) { }
public ZIndexEnum ZIndex_Base()
{
diff --git a/ObjetosSim/Traces/ucTraceSimple.xaml.cs b/ObjetosSim/Traces/ucTraceSimple.xaml.cs
index ea9e09e..6ae690b 100644
--- a/ObjetosSim/Traces/ucTraceSimple.xaml.cs
+++ b/ObjetosSim/Traces/ucTraceSimple.xaml.cs
@@ -11,6 +11,7 @@ using LiveChartsCore.SkiaSharpView;
using LiveChartsCore.Defaults;
using System.Diagnostics;
using CtrEditor.FuncionesBase;
+using System.ComponentModel;
namespace CtrEditor.ObjetosSim
{
@@ -28,9 +29,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Trace";
+ return "Trazador Simple";
}
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -38,18 +43,33 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Alto del trazador")]
+ [property: Name("Alto")]
float alto;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Ancho del trazador")]
+ [property: Name("Ancho")]
float ancho;
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag PLC para la serie de datos")]
+ [property: Name("Tag Serie")]
string tag_serie;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Nombre del eje X")]
+ [property: Name("Nombre Eje X")]
string x_Series_Name;
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Nombre del eje Y")]
+ [property: Name("Nombre Eje Y")]
string y_Series_Name;
private readonly ObservableCollection _observableValues;
@@ -70,7 +90,7 @@ namespace CtrEditor.ObjetosSim
}
};
data = new List();
- stopwatch = new Stopwatch();
+ stopwatch = new Stopwatch();
YScale = 2.0;
Alto = 1;
@@ -85,12 +105,13 @@ namespace CtrEditor.ObjetosSim
public override void UpdatePLCPrimerCiclo()
{
- stopwatch.Start();
+ stopwatch.Start();
}
public override void UpdatePLC(PLCViewModel plc, int elapsedMilliseconds)
{
- if (Tag_serie != null && Tag_serie.Length > 0) {
+ if (Tag_serie != null && Tag_serie.Length > 0)
+ {
var value = LeerBitTag(Tag_serie) == false ? 0 : 1;
data.Add(value);
}
@@ -99,14 +120,14 @@ namespace CtrEditor.ObjetosSim
if (stopwatch.Elapsed.TotalMilliseconds > 1000)
{
stopwatch.Reset();
- stopwatch.Start();
+ stopwatch.Start();
foreach (var v in data)
{
_observableValues.Add(new(v));
- if (_observableValues.Count > 50)
+ if (_observableValues.Count > 50)
_observableValues.RemoveAt(0);
}
-
+
}
}
@@ -144,7 +165,8 @@ namespace CtrEditor.ObjetosSim
{
Datos?.ucUnLoaded();
}
- public void Resize(float width, float height) {
+ public void Resize(float width, float height)
+ {
if (Datos is osTraceSimple datos)
{
datos.Ancho += PixelToMeter.Instance.calc.PixelsToMeters(width);
@@ -159,7 +181,8 @@ namespace CtrEditor.ObjetosSim
Datos.Top = PixelToMeter.Instance.calc.PixelsToMeters(TopPixels);
}
}
- public float Angle() { return 0; } public void Rotate(float Angle) { }
+ public float Angle() { return 0; }
+ public void Rotate(float Angle) { }
public void Highlight(bool State) { }
public ZIndexEnum ZIndex_Base()
{
diff --git a/ObjetosSim/osBase.cs b/ObjetosSim/osBase.cs
index 939d815..a8c3730 100644
--- a/ObjetosSim/osBase.cs
+++ b/ObjetosSim/osBase.cs
@@ -80,13 +80,15 @@ namespace CtrEditor.ObjetosSim
[ObservableProperty]
- [property: Description("Lock object to mouse movement.")]
- [property: Category("Layout:")]
+ [property: Category("Configuración")]
+ [property: Description("Bloquear movimiento del objeto")]
+ [property: Name("Bloquear Movimiento")]
private bool lock_movement;
[ObservableProperty]
- [property: Description("X coordinate.")]
- [property: Category("Layout:")]
+ [property: Category("Configuración")]
+ [property: Description("Coordenada X del objeto")]
+ [property: Name("Izquierda")]
private float left;
public void CheckData()
@@ -114,8 +116,9 @@ namespace CtrEditor.ObjetosSim
public virtual void LeftChanging(float oldValue, float newValue) { }
[ObservableProperty]
- [property: Description("Y coordinate.")]
- [property: Category("Layout:")]
+ [property: Category("Configuración")]
+ [property: Description("Coordenada Y del objeto")]
+ [property: Name("Superior")]
private float top;
partial void OnTopChanged(float value)
@@ -137,8 +140,9 @@ namespace CtrEditor.ObjetosSim
[ObservableProperty]
- [property: Description("Widht.")]
- [property: Category("Layout:")]
+ [property: Category("Configuración")]
+ [property: Description("Ancho del objeto")]
+ [property: Name("Ancho")]
private float ancho;
partial void OnAnchoChanged(float value)
@@ -148,8 +152,9 @@ namespace CtrEditor.ObjetosSim
public virtual void AnchoChanged(float value) { }
[ObservableProperty]
- [property: Description("Height.")]
- [property: Category("Layout:")]
+ [property: Category("Configuración")]
+ [property: Description("Alto del objeto")]
+ [property: Name("Alto")]
private float alto;
partial void OnAltoChanged(float value)
@@ -160,8 +165,9 @@ namespace CtrEditor.ObjetosSim
[ObservableProperty]
- [property: Description("Angle.")]
- [property: Category("Layout:")]
+ [property: Category("Configuración")]
+ [property: Description("Ángulo de rotación del objeto")]
+ [property: Name("Ángulo")]
private float angulo;
partial void OnAnguloChanged(float value)
@@ -177,8 +183,9 @@ namespace CtrEditor.ObjetosSim
public virtual void AnguloChanging(float oldValue, float newValue) { }
[ObservableProperty]
+ [property: Category("Identificación")]
[property: Description("Etiquetas para clasificar el objeto. Use # antes de cada etiqueta (ej: #motor #bomba #critico)")]
- [property: Category("General:")]
+ [property: Name("Etiquetas")]
[property: Editor(typeof(TagPropertyEditor), typeof(TagPropertyEditor))]
[property: TagEditor]
private string etiquetas = "";
@@ -290,8 +297,9 @@ namespace CtrEditor.ObjetosSim
// Group as FacePlate
[ObservableProperty]
- [property: Description("This is a link to a faceplate. It works like an anchor.")]
- [property: Category("Group:")]
+ [property: Category("Agrupación")]
+ [property: Description("Enlace a una placa de texto como ancla")]
+ [property: Name("Panel Grupo")]
[property: ItemsSource(typeof(osBaseItemsSource))]
private string group_Panel;
@@ -333,8 +341,9 @@ namespace CtrEditor.ObjetosSim
// Group as FacePlate
[ObservableProperty]
- [property: Description("This is a link to a FromPlate that moves automatically. It works like an anchor.")]
- [property: Category("Group:")]
+ [property: Category("Agrupación")]
+ [property: Description("Enlace a un marco que se mueve automáticamente como ancla")]
+ [property: Name("Panel Marco")]
[property: ItemsSource(typeof(osBaseItemsSource))]
private string group_FramePanel;
@@ -754,8 +763,9 @@ namespace CtrEditor.ObjetosSim
// All Pages Objects
[NotifyPropertyChangedFor(nameof(Show_On_This_Page))]
[ObservableProperty]
- [property: Description("Enable this object to be used in all pages.")]
- [property: Category("Layout:")]
+ [property: Category("Configuración")]
+ [property: Description("Habilitar este objeto para ser usado en todas las páginas")]
+ [property: Name("Habilitado en Todas Páginas")]
private bool enable_On_All_Pages;
@@ -779,8 +789,9 @@ namespace CtrEditor.ObjetosSim
// Local Data for Global Objects
[NotifyPropertyChangedFor(nameof(Show_On_This_Page))]
[ObservableProperty]
- [property: Description("Enable local data of this global Object on all pages.")]
- [property: Category("Layout:")]
+ [property: Category("Configuración")]
+ [property: Description("Habilitar datos locales de este objeto global en todas las páginas")]
+ [property: Name("Datos Locales para Todas")]
private bool enable_Local_Data_for_All;
partial void OnEnable_Local_Data_for_AllChanged(bool value)
@@ -795,8 +806,9 @@ namespace CtrEditor.ObjetosSim
// Local Data for Global Objects
[NotifyPropertyChangedFor(nameof(Show_On_This_Page))]
[ObservableProperty]
- [property: Description("Enable local data of this global Object on this page.")]
- [property: Category("Layout:")]
+ [property: Category("Configuración")]
+ [property: Description("Habilitar datos locales de este objeto global en esta página")]
+ [property: Name("Datos Locales")]
[property: JsonIgnore]
private bool enable_Local_Data;
@@ -910,7 +922,9 @@ namespace CtrEditor.ObjetosSim
private List showOnThisPagesList;
private bool show_On_This_Page;
- [property: Category("Layout:")]
+ [property: Category("Información")]
+ [property: Description("Mostrar en esta página")]
+ [property: Name("Mostrar en Esta Página")]
public bool Show_On_This_Page
{
get
@@ -958,13 +972,15 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
- [property: Description("Autocreated and cloned with Search Templates")]
- [property: Category("Tag Extraction:")]
+ [property: Category("Datos")]
+ [property: Description("Creado automáticamente y clonado con plantillas de búsqueda")]
+ [property: Name("Clonado")]
bool cloned;
[ObservableProperty]
- [property: Description("Autocreated and cloned with Search Templates")]
- [property: Category("Tag Extraction:")]
+ [property: Category("Datos")]
+ [property: Description("ID del objeto del cual fue clonado")]
+ [property: Name("Clonado Desde")]
[property: Hidden]
UniqueId cloned_from;
diff --git a/ObjetosSim/osSistemaFluidos.cs b/ObjetosSim/osSistemaFluidos.cs
index a01042f..56f83f6 100644
--- a/ObjetosSim/osSistemaFluidos.cs
+++ b/ObjetosSim/osSistemaFluidos.cs
@@ -20,84 +20,97 @@ namespace CtrEditor.ObjetosSim
{
// Referencia a la simulación de fluidos
public SimulacionFluidos _simFluidos;
-
+
// Tamaño del área de simulación
[ObservableProperty]
+ [property: Category("Configuración")]
[property: Description("Ancho del área de simulación en metros")]
- [property: Category("Simulación:")]
+ [property: Name("Ancho Simulación")]
private float anchoSimulacion = 10.0f;
-
+
[ObservableProperty]
+ [property: Category("Configuración")]
[property: Description("Alto del área de simulación en metros")]
- [property: Category("Simulación:")]
+ [property: Name("Alto Simulación")]
private float altoSimulacion = 10.0f;
-
+
// Propiedades del fluido
[ObservableProperty]
+ [property: Category("Apariencia")]
[property: Description("Tamaño visual de las partículas")]
- [property: Category("Visual:")]
+ [property: Name("Tamaño Partícula")]
private float tamañoParticula = 0.01f;
-
+
[ObservableProperty]
+ [property: Category("Apariencia")]
[property: Description("Color del fluido")]
- [property: Category("Visual:")]
+ [property: Name("Color Fluido")]
private Color colorFluido = Colors.CornflowerBlue;
-
+
[ObservableProperty]
+ [property: Category("Apariencia")]
[property: Description("Opacidad de las partículas")]
- [property: Category("Visual:")]
+ [property: Name("Opacidad Partículas")]
private double opacidadParticulas = 0.7;
-
+
// Propiedades de gravedad
[ObservableProperty]
+ [property: Category("Simulación")]
[property: Description("Gravedad en X (m/s²)")]
- [property: Category("Física:")]
+ [property: Name("Gravedad X")]
private float gravedadX = 0.0f;
-
+
[ObservableProperty]
+ [property: Category("Simulación")]
[property: Description("Gravedad en Y (m/s²)")]
- [property: Category("Física:")]
+ [property: Name("Gravedad Y")]
private float gravedadY = 9.8f;
-
+
partial void OnGravedadXChanged(float value)
{
ActualizarGravedad();
}
-
+
partial void OnGravedadYChanged(float value)
{
ActualizarGravedad();
}
-
+
// Estadísticas de la simulación
[ObservableProperty]
+ [property: Category("Información")]
[property: Description("Número de partículas")]
- [property: Category("Estadísticas:")]
+ [property: Name("Número Partículas")]
private int numeroParticulas;
-
+
[ObservableProperty]
+ [property: Category("Información")]
[property: Description("Rendimiento en FPS")]
- [property: Category("Estadísticas:")]
+ [property: Name("FPS")]
private double fps;
// Referencia a componentes (solo para la función Add)
private List _contenedores = new List();
-
+
// Nombre de la clase para identificación
public static string NombreClase()
{
- return "SistemaFluidos";
+ return "Sistema de Fluidos";
}
-
+
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
set => SetProperty(ref nombre, value);
}
-
+
// Métodos para interactuar con la simulación
-
+
///
/// Agrega partículas en un punto específico
///
@@ -105,7 +118,7 @@ namespace CtrEditor.ObjetosSim
{
_simFluidos?.AgregarParticula(posicion);
}
-
+
///
/// Agrega múltiples partículas en un área
///
@@ -113,57 +126,57 @@ namespace CtrEditor.ObjetosSim
{
_simFluidos?.AgregarParticulasEnArea(centro, ancho, alto, cantidad);
}
-
+
///
/// Crea un nuevo tanque y lo agrega a la simulación
///
public Tanque CrearTanque(Vector2 posicion, float ancho, float alto)
{
if (_simFluidos == null) return null;
-
+
Tanque tanque = new Tanque(posicion, ancho, alto, (int)(AnchoSimulacion * 100));
_simFluidos.AgregarContenedor(tanque);
_contenedores.Add(tanque);
return tanque;
}
-
+
///
/// Crea una nueva tubería
///
public Tuberia CrearTuberia(float diametro)
{
if (_simFluidos == null) return null;
-
+
Tuberia tuberia = new Tuberia(diametro, (int)(AnchoSimulacion * 100));
_simFluidos.AgregarContenedor(tuberia);
_contenedores.Add(tuberia);
return tuberia;
}
-
+
///
/// Crea una nueva válvula
///
public Valvula CrearValvula(Vector2 posicion, float diametro, float apertura = 1.0f)
{
if (_simFluidos == null) return null;
-
+
Valvula valvula = new Valvula(posicion, diametro, apertura, (int)(AnchoSimulacion * 100));
_simFluidos.AgregarContenedor(valvula);
_contenedores.Add(valvula);
return valvula;
}
-
+
///
/// Elimina un componente de la simulación
///
public void EliminarComponente(IContenedorFluido componente)
{
if (_simFluidos == null || componente == null) return;
-
+
_simFluidos.RemoverContenedor(componente);
_contenedores.Remove(componente);
}
-
+
///
/// Limpia todas las partículas de la simulación
///
@@ -171,7 +184,7 @@ namespace CtrEditor.ObjetosSim
{
_simFluidos?.LimpiarParticulas();
}
-
+
///
/// Actualiza el vector de gravedad según las propiedades
///
@@ -182,7 +195,7 @@ namespace CtrEditor.ObjetosSim
_simFluidos.AjustarGravedad(new Vector2(GravedadX, GravedadY));
}
}
-
+
///
/// Constructor de la clase
///
@@ -192,28 +205,28 @@ namespace CtrEditor.ObjetosSim
Ancho = 1.0f;
Alto = 1.0f;
}
-
+
// Métodos sobrescritos de osBase
-
+
public override void UpdateGeometryStart()
{
// Crear la simulación de fluidos si es necesario
if (_simFluidos == null)
{
_simFluidos = new SimulacionFluidos(
- AnchoSimulacion,
- AltoSimulacion,
+ AnchoSimulacion,
+ AltoSimulacion,
10000, // Máximo de partículas
new Vector2(GravedadX, GravedadY)
);
}
}
-
+
public override void UpdateGeometryStep()
{
// No es necesario actualizar en cada paso
}
-
+
public override void UpdateControl(int elapsedMilliseconds)
{
// Actualizar estadísticas
@@ -222,7 +235,7 @@ namespace CtrEditor.ObjetosSim
NumeroParticulas = _simFluidos.ParticlesCount;
}
}
-
+
///
/// Llamado cuando se inicia la simulación de fluidos
///
@@ -231,7 +244,7 @@ namespace CtrEditor.ObjetosSim
// Crear la simulación de fluidos si es necesario
UpdateGeometryStart();
}
-
+
///
/// Llamado cuando se detiene la simulación de fluidos
///
@@ -240,7 +253,7 @@ namespace CtrEditor.ObjetosSim
// Detener recursos si es necesario
SimulationStop();
}
-
+
///
/// Actualiza la simulación de fluidos
///
@@ -250,48 +263,48 @@ namespace CtrEditor.ObjetosSim
if (_simFluidos != null)
{
_simFluidos.Actualizar(deltaTime);
-
+
// Actualizar el control visual
UpdateControl((int)(deltaTime * 1000));
}
}
-
+
public override void SimulationStop()
{
// Limpiar recursos si es necesario cuando se detiene la simulación
}
-
+
public override void ucLoaded()
{
base.ucLoaded();
-
+
// Inicializar la simulación de fluidos si es necesario
UpdateGeometryStart();
}
-
+
public override void ucUnLoaded()
{
// Limpiar recursos
_simFluidos = null;
_contenedores.Clear();
}
-
+
// Implementación para las conexiones con PLC
-
+
[ObservableProperty]
[property: Description("Tag de lectura/escritura del nivel del Tanque 1")]
[property: Category("PLC:")]
private string tagNivelTanque1;
-
+
[ObservableProperty]
[property: Description("Tag de lectura/escritura de la apertura de la Válvula 1")]
[property: Category("PLC:")]
private string tagAperturaValvula1;
-
+
// Referencia a componentes típicos para integración con PLC
private Tanque _tanque1;
private Valvula _valvula1;
-
+
public override void UpdatePLC(PLCViewModel plc, int elapsedMilliseconds)
{
// Ejemplo de integración con PLC para la válvula
@@ -300,7 +313,7 @@ namespace CtrEditor.ObjetosSim
float aperturaValvula = LeerWordTagScaled(TagAperturaValvula1) / 100.0f;
_valvula1.Apertura = Math.Clamp(aperturaValvula, 0, 1);
}
-
+
// Ejemplo de escritura del nivel del tanque al PLC
if (_tanque1 != null && !string.IsNullOrEmpty(TagNivelTanque1))
{
diff --git a/ObjetosSim/ucBasicExample.xaml.cs b/ObjetosSim/ucBasicExample.xaml.cs
index 840b96d..af3cc05 100644
--- a/ObjetosSim/ucBasicExample.xaml.cs
+++ b/ObjetosSim/ucBasicExample.xaml.cs
@@ -7,6 +7,7 @@ using CommunityToolkit.Mvvm.ComponentModel;
using LibS7Adv;
using CtrEditor.Simulacion;
using System.Windows.Input;
+using System.ComponentModel;
namespace CtrEditor.ObjetosSim
@@ -24,9 +25,13 @@ namespace CtrEditor.ObjetosSim
public static string NombreClase()
{
- return "Example";
+ return "Ejemplo Básico";
}
- private string nombre = "Transporte TTOP";
+ private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
@@ -34,6 +39,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Simulación")]
+ [property: Description("Velocidad actual del transporte")]
+ [property: Name("Velocidad Actual")]
public float velocidadActual;
partial void OnVelocidadActualChanged(float value)
@@ -42,6 +50,9 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Invierte el sentido de movimiento")]
+ [property: Name("Invertir Dirección")]
bool invertirDireccion;
partial void OnInvertirDireccionChanged(bool value)
@@ -65,6 +76,9 @@ namespace CtrEditor.ObjetosSim
[ObservableProperty]
+ [property: Category("Enlace PLC")]
+ [property: Description("Motor enlazado al transporte")]
+ [property: Name("Motor")]
public string motor;
partial void OnMotorChanged(string value)
@@ -73,18 +87,45 @@ namespace CtrEditor.ObjetosSim
}
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Ancho del transporte")]
+ [property: Name("Ancho")]
public float ancho;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Alto del transporte")]
+ [property: Name("Alto")]
public float alto;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Ángulo de rotación")]
+ [property: Name("Ángulo")]
public float angulo;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Coeficiente de fricción")]
+ [property: Name("Coeficiente Fricción")]
public float frictionCoefficient;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Velocidad máxima a 50Hz")]
+ [property: Name("Velocidad Max 50Hz")]
public float velMax50hz;
+
[ObservableProperty]
+ [property: Category("Configuración")]
+ [property: Description("Tiempo de rampa")]
+ [property: Name("Tiempo Rampa")]
public float tiempoRampa;
+
[ObservableProperty]
+ [property: Category("Información")]
+ [property: Description("Estado de marcha")]
+ [property: Name("En Marcha")]
public bool esMarcha;
diff --git a/ObjetosSim/ucTuberiaFluido.xaml.cs b/ObjetosSim/ucTuberiaFluido.xaml.cs
index 0502a90..28ddc58 100644
--- a/ObjetosSim/ucTuberiaFluido.xaml.cs
+++ b/ObjetosSim/ucTuberiaFluido.xaml.cs
@@ -18,32 +18,32 @@ namespace CtrEditor.ObjetosSim
{
public osBase? Datos { get; set; }
public int zIndex_fromFrames { get; set; }
-
+
public ucTuberiaFluido()
{
InitializeComponent();
this.Loaded += OnLoaded;
this.Unloaded += OnUnloaded;
}
-
+
private void OnLoaded(object sender, RoutedEventArgs e)
{
Datos?.ucLoaded();
}
-
+
private void OnUnloaded(object sender, RoutedEventArgs e)
{
Datos?.ucUnLoaded();
}
-
+
public void Highlight(bool State) { }
-
+
public ZIndexEnum ZIndex_Base()
{
return ZIndexEnum.Estaticos;
}
}
-
+
///
/// ViewModel para la tubería de fluidos
///
@@ -51,16 +51,17 @@ namespace CtrEditor.ObjetosSim
{
// Tubería en la simulación de fluidos
private Tuberia _tuberia;
-
+
// Referencia al sistema de fluidos
private osSistemaFluidos _sistemaFluidos;
-
+
// Propiedades visuales
[ObservableProperty]
+ [property: Category("Configuración")]
[property: Description("Diámetro de la tubería en metros")]
- [property: Category("Dimensiones:")]
+ [property: Name("Diámetro")]
private float diametro = 0.05f;
-
+
partial void OnDiametroChanged(float value)
{
// Actualizar geometría si la tubería ya existe
@@ -70,48 +71,57 @@ namespace CtrEditor.ObjetosSim
ReconstruirTuberia();
}
}
-
+
[ObservableProperty]
+ [property: Category("Apariencia")]
[property: Description("Diámetro interno para visualización del fluido")]
- [property: Category("Visual:")]
+ [property: Name("Diámetro Interno")]
private float diametroInterno;
-
+
[ObservableProperty]
+ [property: Category("Apariencia")]
[property: Description("Color de la tubería")]
- [property: Category("Visual:")]
+ [property: Name("Color Tubería")]
private System.Windows.Media.Color color = System.Windows.Media.Colors.Gray;
-
+
[ObservableProperty]
+ [property: Category("Apariencia")]
[property: Description("Color del fluido")]
- [property: Category("Visual:")]
+ [property: Name("Color Fluido")]
private System.Windows.Media.Color colorFluido = System.Windows.Media.Colors.CornflowerBlue;
-
+
[ObservableProperty]
+ [property: Category("Información")]
[property: Description("Datos del path para dibujar la tubería")]
- [property: Category("Interno:")]
+ [property: Name("Path Data")]
private string pathData;
-
+
[ObservableProperty]
+ [property: Category("Simulación")]
[property: Description("Densidad del fluido (0-1)")]
- [property: Category("Simulación:")]
+ [property: Name("Densidad Fluido")]
private double densidadFluido = 0.7;
-
+
// Lista de puntos que forman la tubería
private List _puntos = new List();
-
+
// Nombre de la clase para identificación
public static string NombreClase()
{
- return "TuberiaFluido";
+ return "Tubería de Fluido";
}
-
+
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
set => SetProperty(ref nombre, value);
}
-
+
///
/// Agrega un punto a la tubería
///
@@ -119,36 +129,36 @@ namespace CtrEditor.ObjetosSim
{
_puntos.Add(new Vector2(x, y));
ActualizarPathData();
-
+
// Si la tubería ya está creada, agregar el punto a la simulación
if (_tuberia != null)
{
_tuberia.AgregarPunto(new Vector2(x, y));
}
}
-
+
///
/// Actualiza la representación visual de la tubería
///
private void ActualizarPathData()
{
if (_puntos.Count < 2) return;
-
+
var converter = new MeterToPixelConverter();
StringBuilder sb = new StringBuilder();
-
+
// Iniciar el path
sb.Append($"M {converter.Convert(_puntos[0].X, null, null, null)} {converter.Convert(_puntos[0].Y, null, null, null)} ");
-
+
// Añadir los demás puntos
for (int i = 1; i < _puntos.Count; i++)
{
sb.Append($"L {converter.Convert(_puntos[i].X, null, null, null)} {converter.Convert(_puntos[i].Y, null, null, null)} ");
}
-
+
PathData = sb.ToString();
}
-
+
///
/// Reconstruye la tubería en la simulación
///
@@ -161,10 +171,10 @@ namespace CtrEditor.ObjetosSim
{
_sistemaFluidos.EliminarComponente(_tuberia);
}
-
+
// Crear nueva tubería
_tuberia = _sistemaFluidos.CrearTuberia(Diametro);
-
+
// Agregar todos los puntos existentes
foreach (var punto in _puntos)
{
@@ -172,7 +182,7 @@ namespace CtrEditor.ObjetosSim
}
}
}
-
+
///
/// Constructor
///
@@ -180,28 +190,28 @@ namespace CtrEditor.ObjetosSim
{
DiametroInterno = Diametro * 0.8f;
}
-
+
public override void OnMove(float LeftPixels, float TopPixels)
{
// Mover todos los puntos de la tubería
if (_puntos.Count > 0)
{
Vector2 delta = new Vector2(Left - CanvasGetLeftinMeter(), Top - CanvasGetTopinMeter());
-
+
for (int i = 0; i < _puntos.Count; i++)
{
_puntos[i] += delta;
}
-
+
ActualizarPathData();
ReconstruirTuberia();
}
}
-
+
public override void ucLoaded()
{
base.ucLoaded();
-
+
// Buscar el sistema de fluidos en la simulación
if (_mainViewModel?.ObjetosSimulables != null)
{
@@ -214,7 +224,7 @@ namespace CtrEditor.ObjetosSim
}
}
}
-
+
// Si no hay puntos, agregar dos puntos iniciales
if (_puntos.Count == 0)
{
@@ -222,11 +232,11 @@ namespace CtrEditor.ObjetosSim
_puntos.Add(new Vector2(Left + Ancho, Top));
ActualizarPathData();
}
-
+
// Crear la tubería en la simulación
ReconstruirTuberia();
}
-
+
public override void ucUnLoaded()
{
// Eliminar la tubería de la simulación
@@ -236,7 +246,7 @@ namespace CtrEditor.ObjetosSim
_tuberia = null;
}
}
-
+
public override void UpdateControl(int elapsedMilliseconds)
{
// Actualizar la densidad del fluido basada en la simulación
@@ -249,7 +259,7 @@ namespace CtrEditor.ObjetosSim
centro += punto;
}
centro /= _puntos.Count;
-
+
// Obtener densidad en esa posición
DensidadFluido = _sistemaFluidos._simFluidos.ObtenerDensidadEnPosicion(centro);
}
diff --git a/ObjetosSim/ucValvulaFluido.xaml.cs b/ObjetosSim/ucValvulaFluido.xaml.cs
index 1c4829f..7b6148f 100644
--- a/ObjetosSim/ucValvulaFluido.xaml.cs
+++ b/ObjetosSim/ucValvulaFluido.xaml.cs
@@ -19,32 +19,32 @@ namespace CtrEditor.ObjetosSim
{
public osBase? Datos { get; set; }
public int zIndex_fromFrames { get; set; }
-
+
public ucValvulaFluido()
{
InitializeComponent();
this.Loaded += OnLoaded;
this.Unloaded += OnUnloaded;
}
-
+
private void OnLoaded(object sender, RoutedEventArgs e)
{
Datos?.ucLoaded();
}
-
+
private void OnUnloaded(object sender, RoutedEventArgs e)
{
Datos?.ucUnLoaded();
}
-
+
public void Highlight(bool State) { }
-
+
public ZIndexEnum ZIndex_Base()
{
return ZIndexEnum.Estaticos;
}
}
-
+
///
/// ViewModel para la válvula de fluidos
///
@@ -52,65 +52,72 @@ namespace CtrEditor.ObjetosSim
{
// Válvula en la simulación de fluidos
private Valvula _valvula;
-
+
// Referencia al sistema de fluidos
private osSistemaFluidos _sistemaFluidos;
-
+
// Propiedades dimensionales
[ObservableProperty]
- [property: Category("Dimensiones:")]
+ [property: Category("Configuración")]
[property: Description("Ancho de la válvula en metros")]
+ [property: Name("Ancho")]
private float ancho = 0.1f;
-
+
[ObservableProperty]
+ [property: Category("Configuración")]
[property: Description("Alto de la válvula en metros")]
- [property: Category("Dimensiones:")]
+ [property: Name("Alto")]
private float alto = 0.06f;
-
+
[ObservableProperty]
+ [property: Category("Configuración")]
[property: Description("Diámetro de la tubería conectada")]
- [property: Category("Dimensiones:")]
+ [property: Name("Diámetro Tubería")]
private float diametroTuberia = 0.05f;
-
+
// Propiedades visuales
[ObservableProperty]
+ [property: Category("Apariencia")]
[property: Description("Color de la válvula")]
- [property: Category("Visual:")]
+ [property: Name("Color")]
private Color color = Colors.Silver;
-
+
[ObservableProperty]
+ [property: Category("Apariencia")]
[property: Description("Color del indicador de apertura")]
- [property: Category("Visual:")]
+ [property: Name("Color Indicador")]
private Color colorIndicador = Colors.CornflowerBlue;
-
+
// Propiedades de funcionamiento
[ObservableProperty]
+ [property: Category("Simulación")]
[property: Description("Apertura de la válvula (0-1)")]
- [property: Category("Operación:")]
+ [property: Name("Apertura")]
private float apertura = 1.0f;
-
+
partial void OnAperturaChanged(float value)
{
Apertura = Math.Clamp(value, 0, 1);
-
+
// Actualizar la válvula en la simulación
if (_valvula != null)
{
_valvula.Apertura = Apertura;
}
}
-
+
// Tag PLC para la válvula
[ObservableProperty]
- [property: Description("Tag de lectura/escritura de la apertura (0-100%)")]
- [property: Category("PLC:")]
+ [property: Category("Enlace PLC")]
+ [property: Description("Tag PLC para lectura/escritura de apertura (0-100%)")]
+ [property: Name("Tag Apertura")]
private string tagApertura;
-
+
// Propiedades calculadas para visualización
public float AperturaVisual => Ancho * 0.8f * Apertura;
public float GrosorIndicador => Alto * 0.2f;
public float ValorApertura => Apertura;
-
+
// Propiedades para posicionamiento de elementos
public float OffsetXRectangulo => -Ancho / 2;
public float OffsetYRectangulo => -Alto / 2;
@@ -118,20 +125,24 @@ namespace CtrEditor.ObjetosSim
public float OffsetYIndicador => -GrosorIndicador / 2;
public float OffsetXTexto => -Ancho * 0.15f;
public float OffsetYTexto => Alto * 0.1f;
-
+
// Nombre de la clase para identificación
public static string NombreClase()
{
- return "ValvulaFluido";
+ return "Válvula de Fluido";
}
-
+
private string nombre = NombreClase();
+
+ [property: Category("Identificación")]
+ [property: Description("Nombre identificativo del objeto")]
+ [property: Name("Nombre")]
public override string Nombre
{
get => nombre;
set => SetProperty(ref nombre, value);
}
-
+
///
/// Constructor
///
@@ -139,7 +150,7 @@ namespace CtrEditor.ObjetosSim
{
// Constructor
}
-
+
public override void OnMove(float LeftPixels, float TopPixels)
{
if (_valvula != null)
@@ -148,17 +159,17 @@ namespace CtrEditor.ObjetosSim
_valvula.ActualizarPosicion(new Vector2(Left, Top));
}
}
-
+
public override void OnRotate(float Delta_Angle)
{
// La rotación visual ya está manejada por el XAML
// No necesita actualizaciones adicionales en la simulación
}
-
+
public override void ucLoaded()
{
base.ucLoaded();
-
+
// Buscar el sistema de fluidos en la simulación
if (_mainViewModel?.ObjetosSimulables != null)
{
@@ -171,7 +182,7 @@ namespace CtrEditor.ObjetosSim
}
}
}
-
+
// Crear la válvula en la simulación
if (_sistemaFluidos != null)
{
@@ -182,7 +193,7 @@ namespace CtrEditor.ObjetosSim
);
}
}
-
+
public override void ucUnLoaded()
{
// Eliminar la válvula de la simulación
@@ -192,7 +203,7 @@ namespace CtrEditor.ObjetosSim
_valvula = null;
}
}
-
+
public override void UpdatePLC(PLCViewModel plc, int elapsedMilliseconds)
{
// Manejar la comunicación con PLC
diff --git a/Scripts/EstandarizarObjetos.ps1 b/Scripts/EstandarizarObjetos.ps1
new file mode 100644
index 0000000..cc345ac
--- /dev/null
+++ b/Scripts/EstandarizarObjetos.ps1
@@ -0,0 +1,138 @@
+# Script para estandarizar objetos derivados de osBase
+# Ejecutar desde la raíz del proyecto CtrEditor
+
+Write-Host "=== Estandarización de Objetos osBase ===" -ForegroundColor Green
+
+# Mapeo de nombres de clase mejorados
+$nombresClase = @{
+ # Transportes
+ "ucTransporteTTop" = "Transporte TTOP"
+ "ucTransporteTTopDualInverter" = "Transporte TTOP Dual Inverter"
+ "ucTransporteGuias" = "Transporte con Guías"
+ "ucTransporteGuiasUnion" = "Transporte con Guías Unión"
+ "ucTransporteCurva" = "Transporte Curva"
+ "ucTransporteCurvaGuias" = "Transporte Curva con Guías"
+
+ # Sensores
+ "ucPhotocell" = "Fotocélula"
+ "ucGearEncoder" = "Encoder de Engranaje"
+ "ucEncoderMotor" = "Encoder Motor"
+ "ucEncoderMotorLineal" = "Encoder Motor Lineal"
+ "ucSensTemperatura" = "Sensor de Temperatura"
+ "ucBoton" = "Botón"
+
+ # Actuadores
+ "ucVMmotorSim" = "Motor VetroMeccanica"
+ "ucValvulaFluido" = "Válvula de Fluido"
+
+ # Elementos Estáticos
+ "ucGuia" = "Guía"
+ "ucDescarte" = "Descarte"
+
+ # Emuladores
+ "ucBottGenerator" = "Generador de Botellas"
+ "ucFiller" = "Llenadora"
+ "ucTanque" = "Tanque"
+
+ # Señales
+ "ucAnalogTag" = "Tag Analógico"
+ "ucBoolTag" = "Tag Digital"
+ "ucConsensGeneric" = "Consenso Genérico"
+
+ # Datos
+ "ucExtraccionTag" = "Extracción de Tag"
+ "ucBuscarCoincidencias" = "Búsqueda de Coincidencias"
+
+ # Decorativos
+ "ucCustomImage" = "Imagen Personalizada"
+ "ucFramePlate" = "Marco"
+ "ucTextPlate" = "Placa de Texto"
+
+ # Fluidos
+ "ucTuberiaFluido" = "Tubería de Fluido"
+ "osSistemaFluidos" = "Sistema de Fluidos"
+
+ # Trazas
+ "ucTrace3" = "Traza 3 Puntos"
+ "ucTraceSimple" = "Traza Simple"
+
+ # Dinámicos
+ "ucBotella" = "Botella"
+ "ucBotellaCuello" = "Botella con Cuello"
+
+ # Ejemplo
+ "ucBasicExample" = "Ejemplo Básico"
+}
+
+# Mapeo de categorías estándar
+$categoriasEstandar = @{
+ "Id:" = "Identificación"
+ "Layout:" = "Posición y Tamaño"
+ "Setup:" = "Configuración"
+ "Simulation:" = "Simulación"
+ "PLC link:" = "Enlace PLC"
+ "Debug:" = "Información"
+ "Encoder:" = "Encoder"
+ "General:" = "Identificación"
+}
+
+function Actualizar-NombreClase {
+ param(
+ [string]$archivo,
+ [string]$nuevoNombre
+ )
+
+ $contenido = Get-Content $archivo -Raw
+ $patron = 'return\s+"[^"]*";'
+ $reemplazo = "return `"$nuevoNombre`";"
+
+ if ($contenido -match $patron) {
+ $contenido = $contenido -replace $patron, $reemplazo
+ Set-Content $archivo $contenido -NoNewline
+ Write-Host "✓ Actualizado NombreClase en $archivo" -ForegroundColor Yellow
+ }
+}
+
+function Estandarizar-Categorias {
+ param([string]$archivo)
+
+ $contenido = Get-Content $archivo -Raw
+ $modificado = $false
+
+ foreach ($categoria in $categoriasEstandar.Keys) {
+ $patron = [regex]::Escape("Category(`"$categoria`")")
+ $reemplazo = "Category(`"$($categoriasEstandar[$categoria])`")"
+
+ if ($contenido -match $patron) {
+ $contenido = $contenido -replace $patron, $reemplazo
+ $modificado = $true
+ }
+ }
+
+ if ($modificado) {
+ Set-Content $archivo $contenido -NoNewline
+ Write-Host "✓ Estandarizadas categorías en $archivo" -ForegroundColor Cyan
+ }
+}
+
+# Buscar todos los archivos .cs en ObjetosSim
+$archivos = Get-ChildItem -Path "ObjetosSim" -Filter "*.cs" -Recurse | Where-Object {
+ $_.Name -like "uc*.cs" -or $_.Name -like "os*.cs"
+}
+
+Write-Host "Encontrados $($archivos.Count) archivos para procesar" -ForegroundColor Blue
+
+foreach ($archivo in $archivos) {
+ $nombreArchivo = [System.IO.Path]::GetFileNameWithoutExtension($archivo.Name)
+
+ # Actualizar nombre de clase si está en el mapeo
+ if ($nombresClase.ContainsKey($nombreArchivo)) {
+ Actualizar-NombreClase -archivo $archivo.FullName -nuevoNombre $nombresClase[$nombreArchivo]
+ }
+
+ # Estandarizar categorías
+ Estandarizar-Categorias -archivo $archivo.FullName
+}
+
+Write-Host "=== Proceso completado ===" -ForegroundColor Green
+Write-Host "Revise los cambios y verifique que la compilación sea exitosa" -ForegroundColor Yellow
\ No newline at end of file