PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Communication série en temps réel avec un micro contrôleur Arduino
Communication série en temps réel avec un micro contrôleur Arduino
Débuté par Bernard LE LEVAN, 01 nov. 2015 03:03 - 8 réponses
Posté le 01 novembre 2015 - 03:03
Bonjour,


L'objet général du test exposé plus bas est de pouvoir connecter une appli Windev à une appli de micro contrôleur; une sorte de passerelle qui permettrait une exploitation très sophistiquée des automates, des systèmes de contrôle, de mesures, de la domotique, plus généralement de tout ce qui est pilotable via un micro controleur. C'est à dire une infinité de systèmes.

Le projet consiste donc à développer un système de communication générique entre un micro-controleur et une appli Windev.


Premier test et première déconvenue :

Configuration :
- L'émetteur est un micro controleur Arduino UNO connecté via une interface USB au PC. Le Microcode est codé en langage proche du C.
- Le récepteur est une appli codée sous Windev 15 (un peu ancien certes ....)

Le test est le suivant :
- Côté micro-controleur
Il est programmé pour envoyer une chaine de caractères genre 'Test de à 9600 Bauds" tous les 1/10ième
de seconde sur son port USB (Ca marche car vérifié sur une console basique).
- Côté windev :
Ouverture du port (COM3 dans ce cas),
Initialisation des paramètres de communication,
Puis boucle infini suivante :
Lecture d'un caractère depuis le port série
Concaténation dans un buffer d'entrée jusqu'à apparition du caractère de fin de ligne puis
Comptage de la ligne et affichage dans une fenêtre qui ne contient que deux champs : No & Texte

Normalement, je devrais voir défiler les No de lignes et leur valeur dans la fenêtre. Sauf que celle ci n'affiche rien et semble partir en vrille ('ne répond pas'). Parfois même les libellés et les cadres des champs eux mêmes ne sont même pas affichés. De temps en temps, la ligne 1 s'affiche puis ... plus rien !

D'autant plus bizarre, que lorsque j'exécute ce code en mode pas à pas, tout se comporte tout à fait normalement, le buffer se charge, les lignes se comptent et les champs d'affichage sont bien chargés .... mais rien ne s'affiche !

Si l'un d'entre vous a déjà essayer de faire ce genre de manip; afficher les caractères reçus d'une interface en temps réel .... mais ce n'est peut être pas possible en Windev !?

Dans tous les cas, merci d'avoir pris le temps de lire ce long résumé.
Posté le 02 novembre 2015 - 16:32
Bonjour, sans voir le code, et n'étant pas le Saint-Esprit, ça va être
difficile d'aider...

Cordialement, Michel

On Sun, 1 Nov 2015 02:03:03 +0100, "Bernard LE LEVAN"
<priv!yr+yr8n0+DBMtznvy+p1z@news.pcsoft> wrote:

Bonjour,


L'objet général du test exposé plus bas est de pouvoir connecter une appli Windev à une appli de micro contrôleur; une sorte de passerelle qui permettrait une exploitation très sophistiquée des automates, des systèmes de contrôle, de mesures, de la domotique, plus généralement de tout ce qui est pilotable via un micro controleur. C'est à dire une infinité de systèmes.

Le projet consiste donc à développer un système de communication générique entre un micro-controleur et une appli Windev.


Premier test et première déconvenue :

Configuration :
- L'émetteur est un micro controleur Arduino UNO connecté via une interface USB au PC. Le Microcode est codé en langage proche du C.
- Le récepteur est une appli codée sous Windev 15 (un peu ancien certes ....)

Le test est le suivant :
- Côté micro-controleur
Il est programmé pour envoyer une chaine de caractères genre 'Test de à 9600 Bauds" tous les 1/10ième
de seconde sur son port USB (Ca marche car vérifié sur une console basique).
- Côté windev :
Ouverture du port (COM3 dans ce cas),
Initialisation des paramètres de communication,
Puis boucle infini suivante :
Lecture d'un caractère depuis le port série
Concaténation dans un buffer d'entrée jusqu'à apparition du caractère de fin de ligne puis
Comptage de la ligne et affichage dans une fenêtre qui ne contient que deux champs : No & Texte

Normalement, je devrais voir défiler les No de lignes et leur valeur dans la fenêtre. Sauf que celle ci n'affiche rien et semble partir en vrille ('ne répond pas'). Parfois même les libellés et les cadres des champs eux mêmes ne sont même pas affichés. De temps en temps, la ligne 1 s'affiche puis ... plus rien !

D'autant plus bizarre, que lorsque j'exécute ce code en mode pas à pas, tout se comporte tout à fait normalement, le buffer se charge, les lignes se comptent et les champs d'affichage sont bien chargés .... mais rien ne s'affiche !

Si l'un d'entre vous a déjà essayer de faire ce genre de manip; afficher les caractères reçus d'une interface en temps réel .... mais ce n'est peut être pas possible en Windev !?

Dans tous les cas, merci d'avoir pris le temps de lire ce long résumé.
Membre enregistré
367 messages
Popularité : +17 (17 votes)
Posté le 06 novembre 2015 - 11:52
Bonjour
la programmation multitache serie multi thread est un art!
"D'autant plus bizarre, que lorsque j'exécute ce code en mode pas à pas, tout se comporte tout à fait normalement, le buffer se charge, les lignes se comptent et les champs d'affichage sont bien chargés .... mais rien ne s'affiche !"

"Si l'un d'entre vous a déjà essayer de faire ce genre de manip; afficher les caractères reçus d'une interface en temps réel .... mais ce n'est peut être pas possible en Windev !?"
Oui on fait ça depuis 30 ans avec plein de langage dont windev

la piste pour bosser proprement :
lancer un thread secondaire qui gère la liaison série.
travailler sur interruption windev un truc du genre surreceptionserie.....
le thread secondaire ne doit pas intervenir dans l'affichage (thread principal)

voilà pour un travail correct.

Quick and Dirty :
coller un multitache(-1) dans la boucle infinie afin de rendre la main à l'os pour gérer l'affichage.....

Question sur l'ide Arduino, la console focntionne correctement en reception de char?

bon courage

--
Dominique "QNX" Lecocq
IC Industrie - Binary Activity
Développement enfoui - M2M
Membre enregistré
367 messages
Popularité : +17 (17 votes)
Posté le 06 novembre 2015 - 11:55
sEvenement..... pas surreceptionserie...on peut y coller un threshold en plus !

--
Dominique "QNX" Lecocq
IC Industrie - Binary Activity
Développement enfoui - M2M
Posté le 08 novembre 2015 - 19:15
Bonsoir,

Merci de votre réponse.

Oui, je sais faire cela sous UNIX car il existe de nombreux mécanismes (les IPC) permettant à des processus indépendant de communiquer. Mais je ne connais pas l'équivalent Windows et je ne savais pas que cela était possible via Windev et c'est votre commentaire qui m'a fait découvrir cette possibilité.

Je vais d'ores et déjà essayer la fonction multitache() que je ne connaissais pas pour voir le résultat. Mais comme la destination est l'écriture d'une librairie pour Arduino, je vais essayer de mettre en oeuvre la version 'thread' que vous préconisez à juste titre.

Merci beaucoup.
Posté le 08 novembre 2015 - 19:15
Bonsoir,

Merci de votre réponse.

Oui, je sais faire cela sous UNIX car il existe de nombreux mécanismes (les IPC) permettant à des processus indépendant de communiquer. Mais je ne connais pas l'équivalent Windows et je ne savais pas que cela était possible via Windev et c'est votre commentaire qui m'a fait découvrir cette possibilité.

Je vais d'ores et déjà essayer la fonction multitache() que je ne connaissais pas pour voir le résultat. Mais comme la destination est l'écriture d'une librairie pour Arduino, je vais essayer de mettre en oeuvre la version 'thread' que vous préconisez à juste titre.

Merci beaucoup.
Posté le 08 novembre 2015 - 19:19
Bonsoir,

Merci de votre réponse.

Effectivement, j'aurais dû mettre les codes correspondant. Suite à la piste que m'a donnée Dominique Lecocq, je vais procéder à quelques essais de mise en oeuvre de thread puisque cela est possible sous windev.

Je reviendrais ici vous donner codes et résultats.

A bientôt j'espère ..
Posté le 11 novembre 2015 - 19:10
Dominique Lecocq me posait la question suivante :

Question sur l'ide Arduino, la console focntionne correctement en reception de char?

Réponse Oui.

J'ai essayé la fonction Multitache(-1), il y a du mieux car le champ de comptage se met bien à jour au fil des envois, mais le champ donnée reste désespérément vide ...

Cordialement,
Posté le 08 décembre 2015 - 12:38
D'un côté tu parles d'usb,de l'autre de rs232, attention,ce n'est pas la même chose, si tu utilise des convertisseurs usb / rs232, attention certains fonctionnent mal, ce que tu peux essayer, c'est ponter rx et tx, envoyer un caractère et voir si tu le reçois.
Quand tu auras réussi ça tu pourras communiquer avec ton arduino ou autre machine.