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
» Aide de PANORAMIC
Domotique avec Panoramic. RS485, la réception de données Emptypar Klaus Aujourd'hui à 17:19

» PANORAMIC V 1
Domotique avec Panoramic. RS485, la réception de données Emptypar Klaus Aujourd'hui à 9:53

» Je teste PANORAMIC V 1 beta 1
Domotique avec Panoramic. RS485, la réception de données Emptypar Klaus Aujourd'hui à 9:52

» bouton dans autre form que 0
Domotique avec Panoramic. RS485, la réception de données Emptypar leclode Hier à 13:59

» KGF_dll - nouvelles versions
Domotique avec Panoramic. RS485, la réception de données Emptypar Klaus Hier à 11:41

» Gestion d'un système client-serveur.
Domotique avec Panoramic. RS485, la réception de données Emptypar Klaus Hier à 10:23

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Domotique avec Panoramic. RS485, la réception de données Emptypar Froggy One Jeu 2 Mai 2024 - 11:16

» @Jack
Domotique avec Panoramic. RS485, la réception de données Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
Domotique avec Panoramic. RS485, la réception de données Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
Domotique avec Panoramic. RS485, la réception de données Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Domotique avec Panoramic. RS485, la réception de données Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Domotique avec Panoramic. RS485, la réception de données Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Domotique avec Panoramic. RS485, la réception de données Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Domotique avec Panoramic. RS485, la réception de données Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Dessine-moi une galaxie
Domotique avec Panoramic. RS485, la réception de données Emptypar jjn4 Lun 22 Avr 2024 - 13:47

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
-45%
Le deal à ne pas rater :
WHIRLPOOL OWFC3C26X – Lave-vaisselle pose libre 14 couverts – ...
339 € 622 €
Voir le deal

 

 Domotique avec Panoramic. RS485, la réception de données

Aller en bas 
3 participants
AuteurMessage
Marc

Marc


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

Domotique avec Panoramic. RS485, la réception de données Empty
MessageSujet: Domotique avec Panoramic. RS485, la réception de données   Domotique avec Panoramic. RS485, la réception de données EmptyMer 26 Mai 2021 - 23:00

Bonjour à tous !

Pour l’instant nous avons vu et mis en pratique une méthode pour commander un périphérique via une liaison série RS485 sous le standard Modbus RTU. Nous n’avons fait que de l’émission de données. Autrement dit, nous n’avons qu’écrit dans le port COM pour communiquer avec l’extérieur à l’aide de l’instruction serial_write.

Dans ce nouveau fil de discussion, je vous propose d’aborder la réception de données avec Panoramic.
Les mots clés employés seront on_receive() et serial_read$(). N’hésitez pas à consulter la documentation de Panoramic à ce sujet.

La réception de données est utile pour :
- contrôler la bonne réception d’une trame envoyée à un périphérique ;
- lire des données dans un périphérique.

Je vous proposerai deux démonstrations. La première avec la carte 8 relais précédemment utilisée et la seconde avec une nouvelle carte d’interface qui sera connectée à 4 sondes de température. Dans Panoramic, nous verrons comment interroger et afficher la valeur de chaque sonde.

A bientôt !


Revenir en haut Aller en bas
Marc

Marc


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

Domotique avec Panoramic. RS485, la réception de données Empty
MessageSujet: Re: Domotique avec Panoramic. RS485, la réception de données   Domotique avec Panoramic. RS485, la réception de données EmptyDim 30 Mai 2021 - 16:45

Bonjour à tous !

La réception de données sur le bus série : Passons à la pratique !

1) Contrôler la bonne réception d’une trame envoyée à la carte utilisée dans ce post : https://panoramic.1fr1.net/t6603-domotique-avec-panoramic-rs485-modbus-rtu

Lors de l'envoi d'un ordre à la carte électronique, cette dernière renvoie sur le bus une trame pour annoncer la bonne ou la mauvaise exécution de cet ordre.
C’est l’accusé-réception (en anglais : acknowledge, abréviation : ACK).

Dans la documentation de la carte utilisée ici, il est dit que si la trame envoyée est identique à celle reçue, c’est que tout va bien.  Smile

En démonstration, je vous propose une petite application qui va envoyer la trame « 01 06 00 05 01 00 98 5B » pour actionner le relais numéro 5.

Dans le code-source ci-dessous, j’ai utilisé la commande d’évènement ON_RECEIVE associée à la fonction SERIAL_READ$() pour récupérer l’ACK.

Code:
label controleAck :'
dim ordre$        :' trame envoyée
dim ack$          :' trame reçue

serial 1
serial_port 1,8
serial_baudrate 1,9600
serial_databits 1,8
serial_parity 1,0
serial_stopbits 1,1
serial_open 1

on_receive 1,controleAck

' trame en hexa à envoyer : 01 06 00 05 01 00 98 5B
ordre$ = chr$(1)+chr$(6)+chr$(0)+chr$(5)+chr$(1)+chr$(0)+chr$(152)+chr$(91)
serial_write 1,ordre$

end

controleAck:
    ack$ = serial_read$(1)

    ' décodage, mise en forme et affichage en hexa de la trame reçue
    print decoderTrame$(ack$)
return


fnc decoderTrame$(trameRecue$)
    dim_local trameHexa$, i%, char$, c%, h$
    
    for i% = 1 to len(trameRecue$)
        char$ = mid$(trameRecue$,i%,1)
        c% = asc(char$)
        h$ = hex$(c%)
        if len(h$) = 1
            h$ = "0" + h$
        end_if
        trameHexa$ = trameHexa$ + h$ + " "
    next i%

    result trameHexa$
end_fnc

L’ACK envoyé par la carte sur le port série, va réveiller la commande ON_RECEIVE. Cette dernière va lancer l’exécution du sous-programme controleAck. Dans notre cas c’est un « LABEL ».

Dans le sous-programme controlAck, la fonction serial_read$() va récupérer l’ACK présent et le copier dans la variable ack$.
 
A ce stade, l’affichage brut de la variable ack$ serait totalement incompréhensible.
Pour le rendre plus humain, j’ai mis sous forme d’une fonction appelée decoderTrame$(), une conversion au format hexadécimal de ladite trame.

En image, voici le résultat :
Domotique avec Panoramic. RS485, la réception de données Test1_10

Je remarque que c’est la réplique exacte de l’ordre envoyé. L’ordre a donc été parfaitement exécuté, sans erreur.

Une différence entre les trames envoyée et reçue, voire l’absence d’ACK, aurait indiqué une défaillance.


En conclusion, cette manipulation nous a permis de mettre en pratique l’utilisation de la commande d’évènement ON_RECEIVE du port série. Nous avons pu voir également l’intérêt de l’ACK. Le traitement de l’ACK, bien que facultatif, permet d’être sûr que l’ordre envoyé est bien arrivé et traité correctement par le processeur de la carte.




A suivre…
Revenir en haut Aller en bas
Marc

Marc


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

Domotique avec Panoramic. RS485, la réception de données Empty
MessageSujet: Re: Domotique avec Panoramic. RS485, la réception de données   Domotique avec Panoramic. RS485, la réception de données EmptyLun 31 Mai 2021 - 15:16

Bonjour à tous !

Suite de mon post précédent :

2) Interroger et afficher les données reçues d’une carte d’interface avec 4 sondes de température.

Pour cette deuxième démonstration, j’ai câblé une carte électronique R4DCB08 qui permet d’interfacer jusqu’à huit sondes de température sur le bus série. Seules quatre sondes sont connectées.

Domotique avec Panoramic. RS485, la réception de données Temp110


Pour récupérer les valeurs des sondes, je vais lire les données dans la carte. Le retour des informations s’effectue par une trame hexadécimale envoyée depuis  la carte électronique.

Dans le code-source de démonstration ci-dessous, un timer va lire les données dans la carte toutes les secondes.

Code:
dim trameRecue$
dim octetRecu$(13)

label lectureTemperatures, lecturePortSerie, quitter

on_close 0,quitter

' initialisation port COM
serial 1
serial_port 1,8
serial_baudrate 1,9600
serial_databits 1,8
serial_parity 1,0
serial_stopbits 1,1
serial_open 1
on_receive 1,lecturePortSerie

timer 2
timer_interval 2,1000
on_timer 2,lectureTemperatures

end


lectureTemperatures:
    serial_write 1,chr$(1)+chr$(3)+chr$(0)+chr$(0)+chr$(0)+chr$(4)+chr$(68)+chr$(9)
return

lecturePortSerie:
    receptionDecoderAfficher()
return

sub receptionDecoderAfficher()
    dim_local i%, char$, c%, valeurHexa$, valeurHexaSonde$, valeurDecimaleSonde%, temperature
    trameRecue$ = serial_read$(1)

    for i% = 1 to len(trameRecue$)
        char$ = mid$(trameRecue$,i%,1)
        c% = asc(char$)
        valeurHexa$ = hex$(c%)
        if len(valeurHexa$) = 1
            valeurHexa$ = "0" + valeurHexa$
        end_if
        octetRecu$(i%) = valeurHexa$
    next i%

    ' affichage en hexadécimal de la trame reçue
    cls
    print "Trame reçue : ";
    for i% = 1 to 13
        print octetRecu$(i%)+" ";
    next i%
    print
    print
    
    ' affichage de la température de la première sonde codée sur 2 octets (octets 4 et 5)
    valeurHexaSonde$ = octetRecu$(4) + octetRecu$(5)
    valeurDecimaleSonde% = hex(valeurHexaSonde$)
    if bin_and(valeurDecimaleSonde%,32768) = 32768 :' vrai si température négative
        temperature = (valeurDecimaleSonde%-65536) / 10
        print "sonde n° 1: " + str$(temperature) + "°C"
    else
        temperature = valeurDecimaleSonde% / 10
        print "sonde n° 1: " + str$(temperature) + "°C"
    end_if
    print
    
    ' affichage de la température de la deuxième sonde codée sur 2 octets (octets 6 et 7)
    valeurHexaSonde$ = octetRecu$(6) + octetRecu$(7)
    valeurDecimaleSonde% = hex(valeurHexaSonde$)
    if bin_and(valeurDecimaleSonde%,32768) = 32768 :' vrai si température négative
        temperature = (valeurDecimaleSonde%-65536) / 10
        print "sonde n° 2: " + str$(temperature) + "°C"
    else
        temperature = valeurDecimaleSonde% / 10
        print "sonde n° 2: " + str$(temperature) + "°C"
    end_if
    print
    
    ' affichage de la température de la première sonde codée sur 2 octets (octets 8 et 9)
    valeurHexaSonde$ = octetRecu$(8) + octetRecu$(9)
    valeurDecimaleSonde% = hex(valeurHexaSonde$)
    if bin_and(valeurDecimaleSonde%,32768) = 32768 :' vrai si température négative
        temperature = (valeurDecimaleSonde%-65536) / 10
        print "sonde n° 3: " + str$(temperature) + "°C"
    else
        temperature = valeurDecimaleSonde% / 10
        print "sonde n° 3: " + str$(temperature) + "°C"
    end_if
    print
    
    ' affichage de la température de la quatrième sonde codée sur 2 octets (octets 10 et 11)
    valeurHexaSonde$ = octetRecu$(10) + octetRecu$(11)
    valeurDecimaleSonde% = hex(valeurHexaSonde$)
    if bin_and(valeurDecimaleSonde%,32768) = 32768 :' vrai si température négative
        temperature = (valeurDecimaleSonde%-65536) / 10
        print "sonde n° 4: " + str$(temperature) + "°C"
    else
        temperature = valeurDecimaleSonde% / 10
        print "sonde n° 4: " + str$(temperature) + "°C"
    end_if
end_sub

quitter:
    timer_off 2
    pause 200
    serial_close 1
return
 

Tous les détails sur codes hexadécimaux à envoyer, et également ceux reçus, sont décrits dans la documentation de la carte.

La trame que j’envoie est une demande de lecture des valeurs des quatre premières sondes de températures. En retour, je recevrai une trame m’indiquant les valeurs mesurées par les quatre sondes.
Le trame retour déclenchera automatiquement l’évènement ON_RECEIVE, puis sera traitée par le sous-programme receptionDecoderAfficher().

Le programme affiche en clair la trame reçue et les valeurs des quatre sondes de température avec un rafraîchissement toutes les secondes.

Domotique avec Panoramic. RS485, la réception de données Temp_b10

Lors de cette capture d’écran, une sonde était dans le réfrigérateur, une dans le congélateur, une à l’extérieur de la maison et une à l’intérieur de la maison. A vous de retrouver dans quel ordre !

Conclusion : Dans cette deuxième démonstration, nous avons mis en pratique la lecture de capteurs de température sur un bus série avec Panoramic. Ces capteurs auraient pu être de simples interrupteurs avec un simple retour d’information «ouvert ou fermé».
Revenir en haut Aller en bas
Yannick




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

Domotique avec Panoramic. RS485, la réception de données Empty
MessageSujet: re   Domotique avec Panoramic. RS485, la réception de données EmptyLun 31 Mai 2021 - 16:43

@Marc,

Je vois sur ton montage que nous avons : 
- 2 fils (jaune et rouge) pour la connexion RS 
- 2 fils (noir et rouge) pour l'alimentation
- 3 fils (noir rouge et jaune) pour les sondes

l' alim et le RS là, jusque là, tout va bien. mais ceux des sondes ?
lequel fait quoi ?

Je sais, je suis pénible. Papydall a "Mr Bourin" moi c'est "Mr Nul".
Mais je ne désespère pas de faire un truc un jour. D'où mon intérêt.
J'adore les trucs à la "James Bond" Cool
Laughing

NB: J'espère pour toi qu'il ne fait pas 32.6°c dans ton congélateur.
lol!
Revenir en haut Aller en bas
Marc

Marc


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

Domotique avec Panoramic. RS485, la réception de données Empty
MessageSujet: Re: Domotique avec Panoramic. RS485, la réception de données   Domotique avec Panoramic. RS485, la réception de données EmptyLun 31 Mai 2021 - 17:13

Bonjour Yannick !

Les sondes possèdent effectivement 3 fils.
Elles intègrent une partie électronique. Leur sortie est numérique.
Elles ont besoin d’une alimentation (fils rouge et noir) et la sortie numérique est le fil jaune.
Ce sont des DS18B20.


Revenir en haut Aller en bas
Yannick




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

Domotique avec Panoramic. RS485, la réception de données Empty
MessageSujet: re   Domotique avec Panoramic. RS485, la réception de données EmptyLun 31 Mai 2021 - 18:40

@Marc,
Merci pour ces précisions qui seront utiles à ceux
qui, comme moi, ont besoin de visualiser pour comprendre.
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Domotique avec Panoramic. RS485, la réception de données Empty
MessageSujet: Re: Domotique avec Panoramic. RS485, la réception de données   Domotique avec Panoramic. RS485, la réception de données EmptyLun 31 Mai 2021 - 18:50

Bonjour Marc et bonjour à tous !

Bravo pour cette mini-série que tu nous propose. C'est très instructif.  Wink

Par contre le problème c'est qu'il y a des fils partout !!  Laughing  Laughing
N'aurai tu pas prévu dans les prochains épisodes une utilisation sans fil ou par courant porteur comme l'indiqué Mindstorm ?
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Yannick




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

Domotique avec Panoramic. RS485, la réception de données Empty
MessageSujet: re   Domotique avec Panoramic. RS485, la réception de données EmptyLun 31 Mai 2021 - 21:31

Bein alors Minibug, on n'aime pas les spaghetti ?
lol!
Revenir en haut Aller en bas
Marc

Marc


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

Domotique avec Panoramic. RS485, la réception de données Empty
MessageSujet: Re: Domotique avec Panoramic. RS485, la réception de données   Domotique avec Panoramic. RS485, la réception de données EmptyLun 31 Mai 2021 - 23:22

Bonsoir les Panoramiciens !

@Minibug
Merci Minibug pour tes encouragements. Je n’ai rien de prévu pour un éventuel futur épisode…

@ tous
Le but de ces articles était de démontrer par la pratique, les capacités de Panoramic à communiquer avec le monde extérieur via la prise USB. Je souhaite y être parvenu.

Voici les liens pour télécharger les documentions des cartes utilisées :

La carte 8 relais : https://mon-partage.fr/f/Sv7rNlgE/

La carte pour huit sondes de température : https://mon-partage.fr/f/8xkVzxZx/

Si vous avez des questions techniques au sujet du protocole de communication Modbus, de la composition d’une trame, de la signification de chaque octet, du CRC, des registres internes aux cartes, du bus RS485, du câblage… , je reste à votre disposition pour y répondre.

A bientôt !




Revenir en haut Aller en bas
Contenu sponsorisé





Domotique avec Panoramic. RS485, la réception de données Empty
MessageSujet: Re: Domotique avec Panoramic. RS485, la réception de données   Domotique avec Panoramic. RS485, la réception de données Empty

Revenir en haut Aller en bas
 
Domotique avec Panoramic. RS485, la réception de données
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Domotique avec Panoramic. RS485, Modbus, RTU
» Domotique avec Panoramic : les cartes Arduino
» Domotique avec Panoramic, Terminal RS232
» Domotique avec Panoramic : Interface RS232 TTL
» Domotique avec Panoramic : transmission Bluetooth.

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos projets-
Sauter vers: