IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XML/XSL et SOAP Discussion :

Grafcet -> XML -> Matrice


Sujet :

XML/XSL et SOAP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 9
    Points
    9
    Par défaut Grafcet -> XML -> Matrice
    Bonjour tout le monde,

    Je suis actuellement étudiant en Automatique et n'ayant aucune notion en langage XML je viens sur ce forum m'adresser à vous

    Je vous explique mon problème:

    - Je me sert d'un petit logiciel (opensource) pour saisir des Grafcet (cf: le Grafcet en bref), logiciel très pratique qui permet également de saisir d'autres types de langage comme le Ladder par exemple, mais pour l'instant seul le Grafcet m'intéresse.

    - Une fois avoir saisit un Grafcet sur le logiciel, il est sauvegardé au format XML et ensuite je peux exécuter une simulation.

    Le grafcet est un langage séquentiel dont la logique à suivre peux "grossomodo" être reprensentée comme ceci :

    Etape 0 -> Transition 0 -> Etape 1 -> Transition 1 -> Etape 2 -> Transition 2...

    Dans le fichier XML créé à partir du Grafcet, chaque étape et transition possèdent :

    - Un LocalId (adresse générale de l'étape ou de la transition)
    - Un point de connexion "entrant" refLocalId relié au LocalId d'une autre étape ou transition (suivant le type)

    Pour être plus clair, je me sert de l'exemple très simple que vous pouvez trouver en pièce jointe. Dans cette exemple vous pouvez voir un grafcet retranscrit en XML.

    On peux notamment voir pour l'étape 0 (S0):
    - Son LocalID = 1
    - Son point de connexion "entrant" refLocalId = 8 correspondant au LocalID de la dernière transition (normal puisque le système est bouclé)

    On regarde maintenant la première transition :
    - Son LocalID = 5
    - Son point de connexion "entrant" refLocalId = 1 correspondant au LocalID de la première étape (étape en amont) ce qui est normal.

    Maintenant le fonctionnement expliqué, j'en arrive à mon problème

    J'aimerai, via les liens entre les étapes et les transitions créer une matrice où l'on peux voir quelle transition est en rapport avec quelle étape.

    Par exemple, les colonnes représentent les étapes et les lignes représentent les transitions. Si la transition 1 est en relation avec l'étape 2 on met un 1 sinon un 0.

    Or je ne sais pas du tout comment récupérer les données du fichier XML tel que le nombre total d'étapes, de transitions...

    J'aimerai donc programmer quelque chose qui "ressemblant" à cette logique:

    Nbrcol = Nombre d'étapes.
    Nbrlig = Nombre de transitions.

    For x=0:1:Nbrc
    InputStep(x)=refLocalId.step(x)
    End

    For y=0:1:Nbrlig
    OutputTransition(y)=LocalId.transition(y)
    End

    Matrice = [Nbrcol * Nbrlig]

    For x=0:1:Nbrcol
    For y=0:1:Nbrlig
    If InputStep(x)=OutputTransition(y)
    Matrice[x * y] = 1;
    Else Matrice[x * y] =0;
    End
    End

    Je sais que ce n'est pas du tout comme cela doit être fait mais avec ceci vous pouvez voir où j'aimerai en arriver.

    Voila j'espère avoir proprement expliqué mon problème. Merci d'avance pour votre aide, n'hésitez pas à me poser des questions si vous avez eu du mal à me comprendre.
    Images attachées Images attachées  

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Il faut utiliser une bibliothèque XML pour ton langage préféré, afin de transformer le fichier XML en données dont tu sauras te servir plus facilement.

    Puis, une fois que cela est fait, tu traites ces données pour faire ta matrice.

    Bref, tout dépend du langage que tu retiens, mais ils ont tous un moyen pour "récupérer les données du fichier XML." Chacun le leur.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Bonjour, désolé de répondre si tard mais j'ai tenté de me débrouiller tout seul par la suite... Ce qui n'a pas était d'un grand succès...

    Je me suis donc renseigné sur les fichiers XML, les bibliothèques XML, parser etc...

    J'ai notamment lu beaucoup de choses sur TinyXML qui semble convenir à mes besoins (possibilité de l'utiliser dans un projet microsoft visual c++ et d'utiliser ses fonctions).

    Mais j'aimerai créer une petite application (sous Microsoft Visual C++ Express ou sous un autre IDE gratuit) qui permette simplement :
    1. ouvrir un fichier .xml (qu'importe le nom)
    2. récupérer certaines données (avec leurs attributs) du fichier .xml
    3. créer une matrice de 0 et de 1 en fonction des données récupérées (avec un simple if et for)
    4. afficher la matrice ou la stocker (dans un fichier .txt par exemple)


    J'ai donc créé un nouveau projet sous visual C++ et lié les fichiers de TinyXML à mon projet.

    Et en me basant sur le tutorial de TinyXML j'ai commencer à créer mes fonctions/class :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    TiXmlDocument doc( "Test2.xml" );
    doc.LoadFile();
     
    class step{
    	public:
    		string name;
    		bool initialStep, negated;
    		int localId, refLocalId;
    };
     
    class transition{
    	public:
    		int localId, refLocalId;
    };
     
    list<step> step_list;
    list<transition> transition_list;
     
    TiXmlHandle hdl(&doc);
    TiXmlElement *elem = hdl.FirstChildElement().FirstChildElement().FirstChildElement().FirstChildElement().FirstChildElement().Element();
     
     
    step cl;
    if(!elem){
    	cerr << "le noeud à atteindre n'existe pas" << endl;
    	return 2;
    }
     
    while (elem){
    	cl.name = elem->Attribute("name");
    	cl.pass = elem->Attribute("initialStep");
    	cl.pass = elem->Attribute("negated");
    	elem->QueryIntAttribute("localId", &cl.droits);
    	elem->QueryIntAttribute("refLocalId", &cl.droits);
    	step_list.push_back(cl);
     
    	elem = elem->NextSiblingElement(); // iteration 
    }
     
    transition cl;
    if(!elem){
    	cerr << "le noeud à atteindre n'existe pas" << endl;
    	return 2;
    }
    endif
     
    while (elem){
    	elem->QueryIntAttribute("localId", &cl.droits);
    	elem->QueryIntAttribute("refLocalId", &cl.droits);
    	transition_list.push_back(cl);
     
    	elem = elem->NextSiblingElement(); // iteration 
    }
     
    list<step>::iterator i;
    for(i=step_list.begin(); i!=step_list.end(); i++)
        cout << i->name << " " << i->initialStep << " " << i->negated << " " << i->localId << " " << i->refLocalId << endl;
     
    list<transition>::iterator i;
    for(i=transition_list.begin(); i!=transition_list.end(); i++)
        cout << i->localId << " " << i->refLocalId << endl;
     
     
    	{
    Mon problème: ça ne marche pas du tout et je pense être complètement être à coté de la plaque. Par exemple pour commencer comment ouvrir un fichier XML quelque soit son nom ?

Discussions similaires

  1. [Débutant] comment écrire matrice (image) dans un fichier xml
    Par moha_gtr dans le forum Images
    Réponses: 2
    Dernier message: 22/02/2014, 16h19
  2. [XSLT] Module de fusion de matrice a partir d un xml
    Par delta07 dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 29/08/2010, 01h38
  3. sérialisation XML en java Avec des Matrice ArrayList
    Par bilred dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 16/04/2009, 15h55
  4. [Structure] Stockage d'une matrice en XML
    Par mamid1706 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 15/03/2007, 16h14
  5. XML : Stocker une matrice en 3 D
    Par PoPeio dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 18/05/2006, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo