Page 2 sur 2

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

Posté : 22 août 2025, 15:28
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

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

Posté : 22 août 2025, 16:22
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.

@+

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

Posté : 22 août 2025, 16:50
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).

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

Posté : 24 août 2025, 10:53
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:

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

Posté : 28 août 2025, 15:00
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...

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

Posté : 28 août 2025, 16:32
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 !

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

Posté : 28 août 2025, 20:43
par itasoft
j'avais fait ça en lagage à contact sur un M221 , le demander si le besoin s'en fait cruellement sentir

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

Posté : 29 août 2025, 09:26
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