Connaître le rang d'un bit à 1 dans un mot.

Forum traitant des automates industriels de marque Siemens.
Avatar du membre
Béryl
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1953
Enregistré le : 20 oct. 2015, 12:00
Localisation : localhost

Re: Connaître le rang d'un bit à 1 dans un mot.

Message par Béryl »

Alors le contexte...
Je cherche à afficher un code de défaut sur un bloc de 3 afficheurs 7 segments pilotables en BCD.
Les défauts ont chacun leur bit respectif (M20.0, M20.1, M20.3...).
Si les défauts M20.0 et M20.3 se déclenchent, je veux afficher 001 (M20.0 est le défaut 1) pendant une seconde, puis 004 (M20.3 est le défaut 4) pendant une seconde, et on reboucle. Et ce, sur autant de défauts qui se présentent et tant qu'il y en a.
Quand tous les défauts ont disparu, j'affiche 000.
J'interroge donc chaque bit du mot MW20 et n'affiche que ceux qui sont à 1. Quand un (ou plusieurs) bit à 0 s'intercale(nt) entre deux bits à 1, je n'en tiens pas compte et file chercher le prochain bit à 1.

Hum, pas facile à expliquer...

Bref, voilà mon code.
MW20 est donc le mot de défaut à interroger.
M2.1 est un pulse (front montant d'un bit de cadence) d'une seconde.
Le reste est dans le DB.
Une petite usine à gaz qui doit pouvoir s'optimiser probablement, mais bon, ça tourne.
Photo d'écran pour avoir tous les commentaires.
Capture d’écran 2025-08-22 152956.png
steph68
Codeur fou
Codeur fou
Messages : 275
Enregistré le : 21 oct. 2015, 08:23

Re: Connaître le rang d'un bit à 1 dans un mot.

Message par steph68 »

ça part dans tous les sens...

voici une version simplifiée :

Code : Tout sélectionner

ON...
O(
UN...
UN...
)
SPB FIN

L "Aff defauts".Cptbit
+ 1
UW 16#F
T "Aff defauts".Cptbit

L "Mot défauts"
SRW
UW 16#1
U ==0
= "Aff defauts".Bit0
SPB FIN

L "Aff defauts".Cptbit
+ 1
T "Aff defauts".Numdef
ITB
T "Afficheur"

FIN: ...

je suis presque sûr que tu peux aussi supprimer des variables.

Ca se fait encore les afficheurs 7 segments ?
Moi je remonte tout sur des TV 55 pouces (via browser web sous Android TV ou sinon Raspberry) avec des libellés directement.

@+
Avatar du membre
Béryl
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1953
Enregistré le : 20 oct. 2015, 12:00
Localisation : localhost

Re: Connaître le rang d'un bit à 1 dans un mot.

Message par Béryl »

Bien joué, Steph68, ton code est plus concis et tourne nickel !
Comme quoi, 10 programmeurs, 10 programmes différents ! :D

Eh oui, il reste des vieilles machines avec des afficheurs (j'ai même encore quelques roues codeuses qui trainent par-ci par-là). Enfin, c'est juste une partie de la machine. Cette dernière est beaucoup plus pêchue et a son propre PPC pour dialoguer avec l'automate (un S7-400).
serhums
Code son premier grafcet
Code son premier grafcet
Messages : 39
Enregistré le : 16 oct. 2024, 13:04

Re: Connaître le rang d'un bit à 1 dans un mot.

Message par serhums »

Excellent!

J’aurais fait encore différemment et certainement avec un code plus « long » :D

En tout cas bravo, j’aime voir vos façons de coder, c’est très intéressant.
Ce genre de code pourrait être utile un jour.
J’ai bien pensé à le sauvegarder mais le jour où j’en aurais besoin, je ne le retrouverais pas :lol:
Avatar du membre
andala
Créateur de langage
Créateur de langage
Messages : 505
Enregistré le : 19 déc. 2016, 10:24
Localisation : Atlantide

Re: Connaître le rang d'un bit à 1 dans un mot.

Message par andala »

Pourquoi ne pas faire un petit block FBD pour ça ? comme ça tu te le trimbale partout en l'exportant... je dis ça...
Une bonne action en entraine toujours une autre
Avatar du membre
Béryl
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1953
Enregistré le : 20 oct. 2015, 12:00
Localisation : localhost

Re: Connaître le rang d'un bit à 1 dans un mot.

Message par Béryl »

andala a écrit : 28 août 2025, 15:00 Pourquoi ne pas faire un petit block FBD pour ça ? comme ça tu te le trimbale partout en l'exportant... je dis ça...
Parce que, comme le dit si bien Steph68 : "Ça se fait encore les afficheurs 7 segments ?"
C'est le première fois en 30 et quelques années que j'ai à faire ça. Alors bon, je garde le code par-là dans mon pc, mais je ne compte pas m'en resservir de si tôt !
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7803
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Connaître le rang d'un bit à 1 dans un mot.

Message par itasoft »

j'avais fait ça en lagage à contact sur un M221 , le demander si le besoin s'en fait cruellement sentir
Automaticien privé (de tout)
itasoft@free.fr
Avatar du membre
andala
Créateur de langage
Créateur de langage
Messages : 505
Enregistré le : 19 déc. 2016, 10:24
Localisation : Atlantide

Re: Connaître le rang d'un bit à 1 dans un mot.

Message par andala »

Béryl a écrit : 28 août 2025, 16:32
andala a écrit : 28 août 2025, 15:00 Pourquoi ne pas faire un petit block FBD pour ça ? comme ça tu te le trimbale partout en l'exportant... je dis ça...
Parce que, comme le dit si bien Steph68 : "Ça se fait encore les afficheurs 7 segments ?"
C'est le première fois en 30 et quelques années que j'ai à faire ça. Alors bon, je garde le code par-là dans mon pc, mais je ne compte pas m'en resservir de si tôt !
Ah oui d'accord ! autant pour moi
Une bonne action en entraine toujours une autre
Répondre