Simulink : Trouver tous les chemins de sous-système depuis un SLX
Dans notre post précédent nous avons appris que les fichiers SLX de Simulink sont simplement des fichiers XML compressés en ZIP.
Le programme C++ suivant peut être utilisé pour analyser model/blockdiagram.xml depuis le fichier ZIP pré-extrait et trouver tous les chemins de sous-système dans le modèle.
simulink_extract_subsystems.cpp
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <tinyxml2.h>
using namespace tinyxml2;
using namespace std;
void traverseXML(XMLElement* element, const string& parentPath, vector<string>& paths) {
// Traiter l'élément courant
const char* blockType = element->Attribute("BlockType");
const char* name = element->Attribute("Name");
string currentPath = parentPath;
if (name) {
currentPath = parentPath.empty() ? name : parentPath + "/" + name;
}
// Traitement spécial pour les blocs de type SubSystem
if (blockType && string(blockType) == "SubSystem") {
paths.push_back(currentPath);
}
// Itérer récursivement à travers tous les éléments enfants
for (XMLElement* child = element->FirstChildElement();
child;
child = child->NextSiblingElement()) {
traverseXML(child, currentPath, paths);
}
}
vector<string> getSubsystemPaths(const string& xmlFile) {
vector<string> paths;
XMLDocument doc;
if (doc.LoadFile(xmlFile.c_str()) != XML_SUCCESS) {
cerr << "Error loading XML file!" << endl;
return paths;
}
XMLElement* root = doc.RootElement();
if (root) {
traverseXML(root, "", paths);
}
return paths;
}
int main() {
string xmlFile = "simulink/blockdiagram.xml"; // Changez ceci par le chemin de votre fichier
vector<string> subsystemPaths = getSubsystemPaths(xmlFile);
for (const string& path : subsystemPaths) {
cout << path << endl;
}
return 0;
}Compilez-le en utilisant
build_simulink_extract.sh
g++ -o simulink_extract_subsystems simulink_extract_subsystems.cpp -ltinyxml2Il imprimera tous les chemins de sous-système dans le modèle sur la console.
Check out similar posts by category:
Matlab/Simulink, C/C++
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow