MiGaNuTs a écrit : ↑09 nov. 2023, 18:57
steph68 a écrit : ↑09 nov. 2023, 18:27

c'est quoi la différence entre un DINT et un DWORD ?
1 bit ...
la différence est l'interprétation que tu en fais (nombre signé ou nombre non signé)
tout deux sont sur 32 bits et à l'exception de la division et de la multiplication, les opérations arithmétiques et logiques sont strictement identiques
le microprocesseur s'en cogne que c'est un DINT, un UDINT ou un DWORD
maintenant un BYTE, WORD, DWORD ou LWORD sont des champs de bits (bitfields) réservés aux opérations logiques (AND, OR, XOR, SHL, SHR)
DINT, UDINT et tous les autres types numériques sont réservés aux opérations arithmétiques (+, -, /, *, **, MOD)
cependant, depuis la nouvelle génération S7-1200 / 1500, TIA tolère les opérations arithmétiques sur les bitfields, ainsi que les shifts sur les entiers par exemple.
Du coup si ce que tu veux couper en deux c'est des dint, alors la en effet c'est plus chiant.
c'est pareil, DINT, UDINT ou DWORD ; le code sera le même sauf pour les conversions (DINT_TO_WORD au lieu de DWORD_TO_WORD), uniquement là pour que le compilateur soit content
De nos jours je sait pas, mais a mon époque on m'a appris qu'une multiplication par 2 puissance n et un décalage de n bits vers la gauche c'est exactement la même chose, et que la division c'est le meme principe.
ma petite pique sur l'école ne s'adressait pas à toi mais à l'auteur du post
oui sauf pour l'extension du bit de signe si le dividende est un type signé.
Code : Tout sélectionner
UDINT#16#FFFF_FF00 / 2 donnera 16#7FFF_FF80
DINT#16#FFFF_FF00 / 2 donnera 16#FFFF_FF80
SHR_DWORD(IN := 16#FFFF_FF00, N := 1) donnera 16#7FFF_FF80
un shift est aussi beaucoup plus rapide à l'exécution (qui s'en soucie de nos jours ?)
et comme dit plus haut, en principe, un DWORD ne se divise pas
@+