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.
Je sèche un peu et je suis débutant SCL merci à vous de m'aider
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
Partager