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