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
» Gestion d'un système client-serveur.
Calcul CRC pour Modbus RTU Emptypar Pedro Aujourd'hui à 15:51

» PANORAMIC V 1
Calcul CRC pour Modbus RTU Emptypar papydall Aujourd'hui à 15:49

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Calcul CRC pour Modbus RTU Emptypar Froggy One Aujourd'hui à 11:16

» @Jack
Calcul CRC pour Modbus RTU Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
Calcul CRC pour Modbus RTU Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
Calcul CRC pour Modbus RTU Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Calcul CRC pour Modbus RTU Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Calcul CRC pour Modbus RTU Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Calcul CRC pour Modbus RTU Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Calcul CRC pour Modbus RTU Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Dessine-moi une galaxie
Calcul CRC pour Modbus RTU Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Calcul CRC pour Modbus RTU Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Calcul CRC pour Modbus RTU Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
Calcul CRC pour Modbus RTU Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Calcul CRC pour Modbus RTU Emptypar leclode Mer 17 Avr 2024 - 11:07

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier

 

 Calcul CRC pour Modbus RTU

Aller en bas 
3 participants
AuteurMessage
Marc

Marc


Nombre de messages : 2386
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 : 8610
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 : 2386
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 : 8610
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 : 75
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 : 2386
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 : 75
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
-
» DLL pour le calcul sur les grands entiers
» TCM : calcul mental
» Interface de commande RS485/Modbus
» Calcul des fonctions trigonométriques réciproques
» Calcul de l'energie cinétique

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: