FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Calcul CRC pour Modbus RTU Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
Calcul CRC pour Modbus RTU Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Calcul CRC pour Modbus RTU Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Calcul CRC pour Modbus RTU Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Calcul CRC pour Modbus RTU Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Calcul CRC pour Modbus RTU Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Calcul CRC pour Modbus RTU Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Calcul CRC pour Modbus RTU Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Calcul CRC pour Modbus RTU Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Calcul CRC pour Modbus RTU Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Calcul CRC pour Modbus RTU Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Calcul CRC pour Modbus RTU Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Calcul CRC pour Modbus RTU Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Calcul CRC pour Modbus RTU Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Calcul CRC pour Modbus RTU Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le deal à ne pas rater :
Smartphone Xiaomi 14 – 512 Go- 6,36″ 5G Double SIM à 599€
599 €
Voir le deal

 

 Calcul CRC pour Modbus RTU

Aller en bas 
3 participants
AuteurMessage
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Calcul CRC pour Modbus RTU Empty
MessageSujet: Calcul CRC pour Modbus RTU   Calcul CRC pour Modbus RTU EmptyVen 21 Mai 2021 - 11:18

Bonjour à tous !

Voici une fonction qui calcule le CRC d’une chaîne hexadécimale Modbus à envoyer dans le port série.

Le programme est brut, sans interface utilisateur. Une version plus civilisée arrivera dans le fil de discussion « Domotique avec Panoramic. RS485, Modbus RTU ».

La fonction intègre :

- un contrôle de la validité des caractères hexadécimaux saisis ;
- un contrôle du nombre de caractères hexadécimaux saisis ;
- l’inversion de résultat CRC au format little-endian.

La trame (ou séquence, chaine… ) peut être saisie avec ou sans espaces, en minuscules ou majuscules.

Bonne journée à tous !

Code:
' calcul crc-16 pour Modbus RTU
' Marc - mai 2021 - https://panoramic.1fr1.net/

' Entrée en hexadécimal ! ! !


dim trame$
caption 0,"Calcul CRC pour modbus RTU."


' chaine hexadécimale test
trame$ = "01 03 EF 12 01 00"


' affichage
trame$ = upper$(trame$)
print trame$
print trame$ + "    " + crc16$(trame$)

end


fnc crc16$(tr$)
    dim_local crc, crc16$, i%, j%, c$, p%, pFort$, pFaible$, t$

    ' suppression des espaces dans la trame reçue en paramètre
    for p% = 1 to len(tr$)
        c$ = mid$(tr$,p%,1)
        if c$ <> " "
            t$ = t$ + c$
        end_if
    next p%

    ' vérification de la chaine hexadécimale reçue par la fonction
    if mod(len(t$),2) = 0
        for p% = 1 to len(t$)
            c$ = mid$(t$,p%,1)
            if instr("0123456789ABCDEFabcdef",c$) = 0
                message "Le caractère ''" + c$ + "'' n'est pas une valeur hexadécimale !"
                exit_fnc
            end_if
        next p%
    else
        message "Le nombre de charactères, sans compter les espaces, doit être pair."
        exit_fnc
    end_if

    ' calcul du crc16
    p% = 1
    crc = hex("FFFF")
    for i% = len(t$) to 1 step -2
        c$ = mid$(t$,p%,2)
        crc = bin_xor(crc,hex(c$))
        p% = P% + 2
        for j% = 0 to 7
            if bin_and(crc,hex("0001")) = 1
                crc = bin_xor(int(crc/2),hex("A001"))
            else
                crc = int(crc/2)
            end_if
        next j%
    next i%

    ' inversion des 2 octets (little-endian)
    crc16$ = hex$(crc)

    while len(crc16$) < 4
        crc16$ = "0" + crc16$
    end_while

    pFort$ = left$(crc16$,2)
    pFaible$ = right$(crc16$,2)
    crc16$ = pFaible$ + " " + pFort$

    result crc16$    
end_fnc



Calcul CRC pour Modbus RTU Calcul10
Sur cette capture d’écran, la première ligne est la séquence hexadécimale de test.
La deuxième ligne répète la même séquence suivie des deux octets du CRC. Dans cet exemple, le CRC est « D0 8B ».

EDIT du 26/05/2021 : correction d'un bug : mise à jour du code.


Dernière édition par Marc le Mer 26 Mai 2021 - 15:52, édité 3 fois
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Calcul CRC pour Modbus RTU Empty
MessageSujet: re   Calcul CRC pour Modbus RTU EmptyVen 21 Mai 2021 - 14:30

Bon, ca commence bien, c'est quoi CRC ?
Embarassed
une nouvelle agence gouvernementale américaine ?
Laughing

Dis toi que le mec en face, il y pipe rien.
Et pourquoi hexadécimal modbus, il est spécial ce code hexa ?
tu vois, c'est pas gagné.
Wink
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Calcul CRC pour Modbus RTU Empty
MessageSujet: Re: Calcul CRC pour Modbus RTU   Calcul CRC pour Modbus RTU EmptyVen 21 Mai 2021 - 23:50

Bonsoir Yannick !

CRC signifie Cyclic Redundancy Check. Traduit en français cela donne Contrôle de Redondance Cyclique.
Plutôt qu’un long discours, jette un œil sur cette page Wikipédia : https://fr.wikipedia.org/wiki/Contr%C3%B4le_de_redondance_cyclique

Quant à l’hexadécimal, il est tout à fait classique.

Pour le protocole de communication Modbus, on envoie une série d’octets en notation hexadécimale, suivi du fameux CRC. Là encore, je te recommande l'article Wikipédia : https://fr.wikipedia.org/wiki/Modbus
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Calcul CRC pour Modbus RTU Empty
MessageSujet: re   Calcul CRC pour Modbus RTU EmptySam 22 Mai 2021 - 4:07

Promis, je vais regarder tout cela mais un peu plus tard
car il est déjà très tard ou très tôt selon l' angle de vue.
lol!
Revenir en haut Aller en bas
Ouf_ca_passe




Nombre de messages : 285
Age : 76
Localisation : Villeneuve d'Ascq (59-Dpt du NORD) France
Date d'inscription : 21/12/2015

Calcul CRC pour Modbus RTU Empty
MessageSujet: Codes autocorrecteurs   Calcul CRC pour Modbus RTU EmptySam 22 Mai 2021 - 11:40

Bonjour à tou(te)s

Oserais-je m'immiscer dans votre conversation de spécialistes ?

https://fr.wikipedia.org/wiki/Code_correcteur

MAIS cela ajoute au signal d'origine des bits à calculer puis à décoder.

Nous avançons-nous vers des simulations 2D sur ordi d'expérimentations de physique ou de chimie ?

Trop fort !
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Calcul CRC pour Modbus RTU Empty
MessageSujet: Re: Calcul CRC pour Modbus RTU   Calcul CRC pour Modbus RTU EmptySam 22 Mai 2021 - 11:59

Bonjour !

@Ouf_ça_passe

Merci de ton intérêt pour le sujet.

Afin d'éviter toute ambiguïté, je précise qu'ici il s'agit du CRC et pas d'un code de correction d'erreur (ECC).

ECC : A l'aide des bits ajoutés, le récepteur peut corriger une certaine quantité d'erreurs du signal reçu. Le signal est accepté et utilisé par le récepteur.

CRC : Le récepteur effectue le même calcul CRC sur le signal reçu. Si les deux CRC sont identiques, le récepteur accepte l'ordre. Dans le cas contraire, le signal reçu est rejeté.
Revenir en haut Aller en bas
Ouf_ca_passe




Nombre de messages : 285
Age : 76
Localisation : Villeneuve d'Ascq (59-Dpt du NORD) France
Date d'inscription : 21/12/2015

Calcul CRC pour Modbus RTU Empty
MessageSujet: DOMOTICON   Calcul CRC pour Modbus RTU EmptyDim 23 Mai 2021 - 7:53

En voiture les Seniors des PANO

c'est Panoramic LE MAG qui redémarre ...

Merci Marc
Revenir en haut Aller en bas
Contenu sponsorisé





Calcul CRC pour Modbus RTU Empty
MessageSujet: Re: Calcul CRC pour Modbus RTU   Calcul CRC pour Modbus RTU Empty

Revenir en haut Aller en bas
 
Calcul CRC pour Modbus RTU
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» TCM : calcul mental
» Calcul d’angle ALIAS Question de calcul de moyenne : RESOLU
» Interface de commande RS485/Modbus
» Calcul du jour de Pâques
» Tendre vers PI

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: