Enhance variable configuration and UI components

- Updated plot_variables.json to include new variables with proper configurations.
- Modified ConfigManager to ensure expanded and fallback variables retain their names.
- Improved VariableSelectorWidget to handle undefined properties gracefully, displaying 'UNKNOWN' or 'N/A' where applicable.
- Refactored main.py to utilize the proper expansion method for symbolic variables when retrieving dataset variables.
- Updated system_state.json with the latest timestamp for last_update.
This commit is contained in:
Miguel 2025-08-28 11:47:34 +02:00
parent a0a65f563d
commit dba0ca2528
6 changed files with 2137 additions and 2419 deletions

File diff suppressed because it is too large Load Diff

View File

@ -58,18 +58,25 @@
"plot_id": "DAR",
"variables": [
{
"color": "#3498db",
"enabled": true,
"line_width": 2,
"variable_name": "HMI_Instrument.QTM306.PVFiltered",
"y_axis": "left"
"color": "#3498db",
"line_width": 2,
"y_axis": "left",
"enabled": true
},
{
"color": "#e30d4d",
"enabled": true,
"line_width": 2,
"variable_name": "HMI_Instrument.QTM307.PVFiltered",
"y_axis": "left"
"color": "#e30d4d",
"line_width": 2,
"y_axis": "left",
"enabled": true
},
{
"variable_name": "AUX Blink_2.0S",
"color": "#3498db",
"line_width": 2,
"y_axis": "left",
"enabled": true
}
]
},
@ -89,6 +96,13 @@
"line_width": 2,
"y_axis": "left",
"enabled": true
},
{
"variable_name": "AUX Blink_2.0S",
"color": "#a0db33",
"line_width": 2,
"y_axis": "left",
"enabled": true
}
]
}

View File

@ -626,12 +626,15 @@ class ConfigManager:
# Expand symbolic variable for PLC communication
expanded_var = self._expand_symbolic_variable(var_config)
if expanded_var:
# Ensure the expanded variable has the proper name
expanded_var["name"] = var_name
expanded_variables[var_name] = expanded_var
else:
# If expansion fails, keep the original symbolic config for counting
# If expansion fails, keep original symbolic config
# but mark it as non-functional for PLC communication
fallback_var = var_config.copy()
fallback_var["_expansion_failed"] = True
fallback_var["name"] = var_name # Ensure fallback has name
expanded_variables[var_name] = fallback_var
if self.logger:
@ -641,8 +644,10 @@ class ConfigManager:
f"variable '{var_name}' in dataset '{dataset_id}'"
)
else:
# Keep manual variables as they are
expanded_variables[var_name] = var_config
# Keep manual variables as they are, ensure they have name
manual_var = var_config.copy()
manual_var["name"] = var_name
expanded_variables[var_name] = manual_var
return expanded_variables
@ -867,14 +872,14 @@ class ConfigManager:
# Keep the configType as "symbol" for reference but make it functional
expanded_var["configType"] = "symbol"
if self.logger:
symbol_name = var_config.get("symbol")
var_name = expanded_var.get("name", symbol_name)
area = expanded_var.get("area", "unknown")
offset = expanded_var.get("offset", "unknown")
self.logger.info(
f"Expanded symbolic variable '{symbol_name}' -> {var_name} ({area}:{offset})"
)
# if self.logger:
# symbol_name = var_config.get("symbol")
# var_name = expanded_var.get("name", symbol_name)
# area = expanded_var.get("area", "unknown")
# offset = expanded_var.get("offset", "unknown")
# self.logger.info(
# f"Expanded symbolic variable '{symbol_name}' -> {var_name} ({area}:{offset})"
# )
return expanded_var

View File

@ -312,10 +312,10 @@ export function VariableSelectorWidget(props) {
📊 {selectedVariable.dataset}
</Badge>
<Badge colorScheme={typeColors[selectedVariable.type] || 'gray'}>
{selectedVariable.type.toUpperCase()}
{selectedVariable.type?.toUpperCase() || 'UNKNOWN'}
</Badge>
<Badge colorScheme="gray" variant="outline">
{selectedVariable.address}
{selectedVariable.address || 'N/A'}
</Badge>
{selectedVariable.streaming && (
<Badge colorScheme="green">
@ -324,7 +324,7 @@ export function VariableSelectorWidget(props) {
)}
</HStack>
<Text fontSize="xs" color="gray.600">
PLC Address: {selectedVariable.area}{selectedVariable.db ? `${selectedVariable.db}.` : ''}{selectedVariable.offset}
PLC Address: {selectedVariable.area || ''}{selectedVariable.db ? `${selectedVariable.db}.` : ''}{selectedVariable.offset || ''}
{selectedVariable.streaming ? ' • Real-time streaming enabled' : ' • Static logging only'}
</Text>
<Text fontSize="sm">

10
main.py
View File

@ -453,12 +453,16 @@ def get_expanded_dataset_variables():
hasattr(streamer.config_manager, "datasets")
and streamer.config_manager.datasets
):
for dataset_id, dataset_config in streamer.config_manager.datasets.items():
if "variables" in dataset_config and dataset_config["variables"]:
for dataset_id in streamer.config_manager.datasets.keys():
# Use proper expansion method for symbolic variables
expanded_vars = streamer.config_manager.get_expanded_dataset_variables(
dataset_id
)
if expanded_vars:
expanded_data["variables"].append(
{
"dataset_id": dataset_id,
"variables": dataset_config["variables"],
"variables": expanded_vars,
}
)

View File

@ -7,6 +7,6 @@
]
},
"auto_recovery_enabled": true,
"last_update": "2025-08-28T11:31:29.749311",
"last_update": "2025-08-28T11:46:10.725708",
"plotjuggler_path": "C:\\Program Files\\PlotJuggler\\plotjuggler.exe"
}