questions diverses

Forum traitant des automates industriels de marque Siemens.
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2079
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: questions diverses

Message par philou77 »

Salut !

tu peux déclarer tes tempos en STAT de ton FB Type de donnée (SFB3 = TP, SFB4=TON, SFB5 =TOF)

elles deviennent alors des instances de ton FB !
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
R26R
Aguerri de l'automation
Aguerri de l'automation
Messages : 90
Enregistré le : 19 juin 2016, 20:04

Re: questions diverses

Message par R26R »

Salut,

En général j'utilise la technique décrite par philou77.

Sinon, si tu ne veux pas changer ton code, tu déclares en entrée de bloc une donnée de type "timer" (de mémoire). Et tu colle tes numéros de tempo sur tes appels de bloc...
Mick1903
Aguerri de l'automation
Aguerri de l'automation
Messages : 81
Enregistré le : 05 nov. 2018, 21:52

Re: questions diverses

Message par Mick1903 »

Bonsoir,

Je vous remercie pour vos réponses.finalement,j'ai utilisé la méthode de philou 77, et c'est nickel. Merci encore et bonne soirée.

Cordialement
Mick1903
Aguerri de l'automation
Aguerri de l'automation
Messages : 81
Enregistré le : 05 nov. 2018, 21:52

Re: questions diverses

Message par Mick1903 »

Bonsoir,

Je cherche à concaténer 2 chaines de caractères:
1.PNG
1.PNG (3.84 Kio) Vu 4364 fois
Jusque la tout se passe bien :
2.PNG
2.PNG (2.96 Kio) Vu 4364 fois
Par contre lorsque j'utilise le bloc fonction FC2 qui permet de concaténer les 2 chaines, je n'ai pas le résultat espéré:
4.PNG
4.PNG (4.24 Kio) Vu 4364 fois
5.PNG
5.PNG (5.64 Kio) Vu 4364 fois
#result_1 est une variable STAT. Merci pour vos réponses.

Mickael
kcnarf
Code son premier grafcet
Code son premier grafcet
Messages : 50
Enregistré le : 23 mai 2017, 17:07
Localisation : Rennes

Re: questions diverses

Message par kcnarf »

Salut,
çà fonctionne mais il faut que tu déclares une string [12] ou [14] (à vérifier) car Siemens Step7 réserve toujours 2 octets supplémentaires pour les variables de Type String.
C'est pourquoi je préfère utiliser des tableaux de caractères : Array of Char.
Ta string IN1 occupe 6 octets. Ta string IN2 occupe 6 octets.
Donc la concaténation prendra au minimum 12 octets + (peut être) 2 octets pour la déclaration de la string RESULT.
Après il faut que tu retravailles ta chaîne RESULT pour enlever les caractères qui ne t’intéressent pas...Par exemple en faisant un transfert Octet par Octet dans un tableau de caractères des octets que tu souhaitent.
Pour info une variable de Type String n'est q'un tableau de caractères avec 2 octets système en entête.
Tu trouveras dans l'aide la description des 2 octets.
Franck
la théorie c'est quand on sait tout mais que rien ne marche. La pratique c'est quand tout fonctionne et qu'on ne sait pas pourquoi.
Mick1903
Aguerri de l'automation
Aguerri de l'automation
Messages : 81
Enregistré le : 05 nov. 2018, 21:52

Re: questions diverses

Message par Mick1903 »

Salut Franck,

Merci pour ta réponse. J'ai modifié comme tu me l'as conseillé, et malgré tout je n'arrive pas au résultat souhaité.

J'ai ajouté 2 octets dans IN1 et IN2 ainsi que dans la variable #result_1. Par contre je ne retrouve pas le 'PR' dans la variable #result_1
6.PNG
6.PNG (1.11 Kio) Vu 4285 fois
Sinon pour la méthode que tu utilises:
kcnarf a écrit : 05 juil. 2020, 13:05 C'est pourquoi je préfère utiliser des tableaux de caractères : Array of Char.

Une fois les caractères dans le tableau comment fais tu pour la concaténation?

Bonne soirée
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2079
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: questions diverses

Message par philou77 »

Salut!

J'ai fait le test.

Le FC2 fonctionne bien.

si tu as des strings partout.. ca doit aller.

tu déclares une string de 4, elle occupe 'en vrai' 6 octets, les deux premier étantle nb max de caractere de la chaine, le second le nombre actuel de caractères.

Mais c'est transparent pour toi.
Donc 2 string de 4 tiennent dans une string de 8 ! tout va bien
je pense que tu ne passe pas bien tes strings, la première étant introuvable dans le résultat (ton premier post) , je chercherai de ce côté là.

quand a un array of char et bien c'est un tableau
donc c'est facile de manipuler les éléments comme on veut
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Mick1903
Aguerri de l'automation
Aguerri de l'automation
Messages : 81
Enregistré le : 05 nov. 2018, 21:52

Re: questions diverses

Message par Mick1903 »

Salut!

Merci pour ta réponse, effectivement il y avait un problème de placement des variables string. il affiche bien dans mon DB d'instance 'PRODUIT1', mais lorsque je redémarre mon simulateur. Il m'affiche ceci:
112233.JPG
La seule "façon" que j'ai trouvé pour le moment c'est de modifier les adresses des variables des DB4.DBD.., (par exemple: db4.dbd0 et db4.dbd4) de transférer sur le simulateur puis ensuite remettre les anciennes adresses (db4.dbd2 et db4.dbd6) et de transférer de nouveau. Ensuite l’affichage est correct dans la variable #result_1
Capture2.JPG
Capture33.JPG
Je pense qui y ait une autre façon de faire.

Merci pour vos réponses

Bonne journée
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2079
Enregistré le : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: questions diverses

Message par philou77 »

RE !

Aie , j'ai mal à la tête à te lire..

Je comprends ni le problème, ni la solution !
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Mick1903
Aguerri de l'automation
Aguerri de l'automation
Messages : 81
Enregistré le : 05 nov. 2018, 21:52

Re: questions diverses

Message par Mick1903 »

Re!

Désolé, pas évident à expliquer :D

Je vais tenter de faire mieux!

Dans ma variable STRING [8], présente dans mon DB10 je retrouve correctement mon commentaire "PRODUIT1".

Jusque là tout va bien.

Admettons je ferme mon PC, le lendemain j'ouvre mon programme, je démarre mon simulateur PLCSIM, je transfère mon programme, dans mon DB 10, il m'affichera un commentaire incohérent. Alors que la veille,j'avais enregistré mon programme avant de le fermer, donc il est identique.

La seule façon que j'a trouvé pour y remédier, c'est de modifier cette partie de programme :

L DW#16#50524F44
T DB4.DBD2

L DW#16#55495431
T DB4.DBD6

modification et transfert forcément à ce moment là, mon commentaire ne veut rien dire

L DW#16#50524F44
T DB4.DBD0

L DW#16#55495431
T DB4.DBD2

De ce fait, je reviens comme à l'initial, je transfert, et ce coup ci mon commentaire est affiché correctement "PRODUIT1"

Sans faire cette étape, ça ne fonctionne pas pour moi! Tant que le simulateur n'est pas coupé, je n'ai aucun problème.J'ai testé sur un autre PC, est c'est identique.

Désolé pour le mal de tête, bonne journée
Répondre