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

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : mai 2018
    Messages : 4
    Points : 5
    Points
    5

    Par défaut Lecture db et ecriture SCL

    Bonjour à tous,
    Donc je suis en stage en informatique industriel. Je dois développer un bloc assez complexe. Donc je m'entraine à plus simple pour commencer
    Donc j'ai fais un nouveaux projet sous simatic manager (je dois utiliser cela car je dois faire un programme compatible avec s7-1200,1500
    J'ai créé un DB20 de test avec plusieurs information de type REAL.
    Je voudrais depuis un un FC lire toutes les information une à une dans mon db.
    Plusieurs question se pose.
    1) je voudrais utiliser un ARRAY[0..n] la valeur n n'est pas connu à la compilation donc problème. Allocation dynamique peut être? Si oui quel est la procédure. Car pas de fonction malloc etc... Et comment connaitre la taille du db pas facile a trouver.
    2)J'ai fuiné sur le net et je trouve des solutions avec pointeur mais je ne vois pas ou mon db est lier. Ni comment accèder à toutes les adress du db. Voici le code que j'ai adapter sans trop comprendre
    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
    FUNCTION FC123:VOID
    VAR_TEMP
        // création d'un pointeur
        pDB:ANY;
          // Liaison du pointeur sur la strucuture de donnée
       pAny AT pDB:
    STRUCT
        S7Code:BYTE;
        DataType:BYTE;
        Lenght :INT;
        DBNumber:INT;
        MemoryArea:BYTE;
        ByteAdressMSB:BYTE;
        ByteAdressLSB:WORD;
    END_STRUCT;     
    END_VAR
    
    VAR_INPUT
        TAILLE_DB:INT;
        NUMERO_DB:INT;
        NOMBRE_DE_POINT:INT;
        LECTURE_CAPTEUR:REAL;
        UNITER_DE_LECTURE:CHAR;
        
    END_VAR
    VAR_OUTPUT
        INDEX_VALUE:INT;
        VALEUR_CHARGE:REAL;
        VALEUR_CAPTEUR_DB:REAL;
    END_VAR
    // Initialisation des composante de la structure
    pAny.S7Code := 16#10;
    // type REAL 
    pAny.DataType := 16#08;
    
    pAny.Lenght := TAILLE_DB;
    pAny.DBNumber := NUMERO_DB;
    pAny.MemoryArea := 16#84;
    pAny.ByteAdressMSB :=0;
    pAny.ByteAdressLSB :=0;
    
    
    END_FUNCTION

    Je voudrais aussi savoir comment dans un FB je peux instancier un DB car a chaque fois que je met un fb dans mon ob1 bah cela s'affiche en rouge donc je dois avoir oublier quelques chose. Alors je met une db en input, mais c'est pas ce que je cherche à faire.
    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
    FUNCTION_BLOCK FB1
    
    VAR_INPUT
        DB_TEST: BLOCK_DB;
    END_VAR
    
    VAR_OUTPUT
        outputest:REAL;
    END_VAR
    
    VAR
        stat_var1:REAL;
    END_VAR
    outputest:=DWORD_TO_REAL(DB_TEST.dd0);
    
    END_FUNCTION_BLOCK
    Je sèche un peu et je suis débutant SCL merci à vous de m'aider

  2. #2
    Membre actif
    Homme Profil pro
    développeur en automation industrielle
    Inscrit en
    mai 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : développeur en automation industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2012
    Messages : 172
    Points : 258
    Points
    258

    Par défaut

    salut

    1) je voudrais utiliser un ARRAY[0..n] la valeur n n'est pas connu à la compilation donc problème.
    Ce n'est pas possible, ton array doit toujours avoir une taille déterminée.
    Les pointeurs sur les db fonctionne mieux quand celle ci sont "non optimisé" car a ce moment la la db est contenue dans un seul "morceau" de mémoire.
    En cherchant un peu dans les bibliothèques de TIA , tu devrais trouver des instructions lié au DB

    Je voudrais aussi savoir comment dans un FB je peux instancier un DB car a chaque fois que je met un fb dans mon ob1 bah cela s'affiche en rouge donc je dois avoir oublier quelques chose. Alors je met une db en input, mais c'est pas ce que je cherche à faire.
    Les FB on besoin d'un espace mémoire,
    soit le fb est instanciable et alors tu crées une variables du même type que le fb, ou alors tu dois utilisé une DB

Discussions similaires

  1. [Batch] Lecture fichier puis ecriture dans base MySQL
    Par debo41 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 05/08/2009, 18h18
  2. lecture/ecriture des broches RTS/CTS du port RS232
    Par .:: sly51 ::. dans le forum C
    Réponses: 3
    Dernier message: 24/10/2006, 15h28
  3. Ecriture et lecture de fichiers
    Par nozvad dans le forum Général Python
    Réponses: 4
    Dernier message: 12/10/2004, 16h47
  4. Réponses: 2
    Dernier message: 26/09/2003, 14h51
  5. Lecture et ecriture fichier .ini
    Par despe dans le forum C
    Réponses: 6
    Dernier message: 23/07/2003, 20h40

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