OVH Cloud OVH Cloud

Dialogue port serie et temps reel

13 réponses
Avatar
Aurélien REGAT-BARREL
Bonjour à tous,
Alors je sais que Windows n'est pas temps réel, mais je connais quelqu'un
qui est confronté au problème de pouvoir dialoguer avec le port série et de
pouvoir chronométrer le temps écoulé depuis la dernière reception au niveau
de la ms, voire un peu moins. Il a fait un petit soft qui marchouille, il
voudrait être sûr que ça va bien marcher. Avant de penser au driver, je
voudrais vos retours d'expérience sur le passage en priorité max du thread
user. Est-ce assez fiable pour pouvoir être assuré d'avoir la main le temps
de l'émission / réception ?
Si j'ai bien compris c'est surtout la réception son problème, car pour
marquer la fin d'une trame dans le protocole qu'il utilise il n'y a pas de
caractère mais tout simplement un temps de non émission de l'ordre de 2ms.
Ainsi il peut recevoir 2 trames espacées de 10ms, et il faut êter capable de
détecter ces 10ms pour identifier que c'est 2 trames et non une seule...
Et sinon au niveau driver vous avez une idée sur ce que ça représente comme
travail ?
Merci pour votre aide.

--
Aurélien REGAT-BARREL

10 réponses

1 2
Avatar
halfwolf
"Aurélien REGAT-BARREL" wrote in message news:<4180b90b$0$30600$...
Bonjour à tous,



Salut,

Si j'ai bien compris c'est surtout la réception son problème, car pour
marquer la fin d'une trame dans le protocole qu'il utilise il n'y a pas de
caractère mais tout simplement un temps de non émission de l'ordre de 2ms.
Ainsi il peut recevoir 2 trames espacées de 10ms, et il faut êter capable de
détecter ces 10ms pour identifier que c'est 2 trames et non une seule...
Et sinon au niveau driver vous avez une idée sur ce que ça représente comme
travail ?



Ca me paraît bien compliqué tout ça pour un cas assez banal.
Pas besoin de driver : Windows permet de gérer la détection de fin de
trame avec le membre ReadIntervalTimeout de la structure COMMTIMEOUTS.

Par exemple, en synchrone, ton ReadFile reste bloquant jusqu'à ce
qu'il se soit écoulé ReadIntervalTimeout ms depuis la réception du
dernier caractère.
Tu peux donc directement traiter la trame reçue lorsque ton ReadFile
retourne.

S'il veut être capable d'émettre des caractères en même temps qu'il en
attend en réception, il faut absolument passer en asynchrone en
ouvrant le port en overlapped.

MSDN est son ami, à voir : CreateFile, GetCommState, SetCommState,
SetCommTimeouts, ReadFile, WriteFile, ...

Merci pour votre aide.



De rien.

HalfWolf
Avatar
Aurélien REGAT-BARREL
Hello,

Ca me paraît bien compliqué tout ça pour un cas assez banal.
Pas besoin de driver : Windows permet de gérer la détection de fin de
trame avec le membre ReadIntervalTimeout de la structure COMMTIMEOUTS.



Est-ce précis à la ms, dans 100% des cas ?
Car d'après les dires de cette personne, il comptais acheter une lib ou un
soft censé bien faire ce qu'il veut, sauf que pareil les temps ne sont pas
respectés.

Par exemple, en synchrone, ton ReadFile reste bloquant jusqu'à ce
qu'il se soit écoulé ReadIntervalTimeout ms depuis la réception du
dernier caractère.


Et l'histoire des 10ms du multitâche ne s'appliquent pas ?

S'il veut être capable d'émettre des caractères en même temps qu'il en
attend en réception, il faut absolument passer en asynchrone en
ouvrant le port en overlapped.


Non ça devrait pas être le cas.

Merci.

--
Aurélien REGAT-BARREL
Avatar
Patrick D.
On Fri, 29 Oct 2004 12:15:54 +0200, Aurélien REGAT-BARREL
wrote:

Hello,

Ca me paraît bien compliqué tout ça pour un cas assez banal.
Pas besoin de driver : Windows permet de gérer la détection de fin de
trame avec le membre ReadIntervalTimeout de la structure COMMTIMEOUTS.



Est-ce précis à la ms, dans 100% des cas ?



certainement pas, windows n'est pas un OS temps réel, donc tu ne peux rien
prédire.
c'est pour ça qu'il y a encore des trucs qui tournent en dos pur, car
c'est du monotâche.

pour le temps réel prédictif, voir les OS prévus pour

--
* enlevez '.don't.spam' et '.invalid' de mon adresse eMail si vous voulez
m'écrire *
* Donne un poisson à un homme, il aura à manger pour un jour
* Apprends-lui à pêcher, il aura à manger pour tous les jours de sa vie *
Avatar
Aurélien REGAT-BARREL
> certainement pas, windows n'est pas un OS temps réel, donc tu ne peux rien
prédire.
c'est pour ça qu'il y a encore des trucs qui tournent en dos pur, car
c'est du monotâche.

pour le temps réel prédictif, voir les OS prévus pour



Et au niveau noyau (driver) on peut pas y arriver ?
Le truc c'est que ce mec développe un logiciel couplé à un matériel, et que
ses utilisateurs sont tous sous Windows.
Moi je vois 2 solutions :
- arriver à faire ça en soft (driver ?).
- insérer un composant électronique entre le PC et le bidule, qu'on pilote
aussi par liaison série, sauf que lui il faut pas le faire en temsp réel.

Bien sûr la solution soft serait l'idéal. Il est prêt à payer quelqu'un s'il
faut faire un driver, il m'a demandé des infos, où et par qui faire ça, pour
combien, je transmet...:-)
A+

--
Aurélien REGAT-BARREL
Avatar
Patrick D.
On Fri, 29 Oct 2004 12:59:47 +0200, Aurélien REGAT-BARREL
wrote:

certainement pas, windows n'est pas un OS temps réel, donc tu ne peux
rien
prédire.
c'est pour ça qu'il y a encore des trucs qui tournent en dos pur, car
c'est du monotâche.

pour le temps réel prédictif, voir les OS prévus pour



Et au niveau noyau (driver) on peut pas y arriver ?
Le truc c'est que ce mec développe un logiciel couplé à un matériel, et
que
ses utilisateurs sont tous sous Windows.
Moi je vois 2 solutions :
- arriver à faire ça en soft (driver ?).
- insérer un composant électronique entre le PC et le bidule, qu'on
pilote
aussi par liaison série, sauf que lui il faut pas le faire en temsp réel.



je ne pense qu'on puisse y arriver au niveau driver, il faut passer au
niveau kernel ( bon, la distinction, je dis peut-être une c...., je ne
suis pas spécialiste).
imagine que pendant une acquisition sur port série, l'utiliseur ait une
idée saugrenue, comme faire un encodage mpeg sur une machine peu puissante.

il me semble qu'il existe une version de windows plus adaptée, mais
destinée à être incorporée dans des dispositifs, donc non installable sur
un pc.

ou alors être sûr que la machine ne fera que çà.
par exemple au boulot, on a une application qui fait de l'acquisition par
port série, le pc ne fait que çà, et l' autre dispositif dispose d'une
mémoire tampon.
en cas de perte de communication, il peut y a voir saturation du tampon et
perte de données

--
* enlevez '.don't.spam' et '.invalid' de mon adresse eMail si vous voulez
m'écrire *
* Donne un poisson à un homme, il aura à manger pour un jour
* Apprends-lui à pêcher, il aura à manger pour tous les jours de sa vie *
Avatar
Loïc Joly
Aurélien REGAT-BARREL wrote:
certainement pas, windows n'est pas un OS temps réel, donc tu ne peux rien
prédire.
c'est pour ça qu'il y a encore des trucs qui tournent en dos pur, car
c'est du monotâche.

pour le temps réel prédictif, voir les OS prévus pour




Et au niveau noyau (driver) on peut pas y arriver ?
Le truc c'est que ce mec développe un logiciel couplé à un matériel, et que
ses utilisateurs sont tous sous Windows.
Moi je vois 2 solutions :
- arriver à faire ça en soft (driver ?).



Ca n'est pas suffisant pour faire du temps réél.

- insérer un composant électronique entre le PC et le bidule, qu'on pilote
aussi par liaison série, sauf que lui il faut pas le faire en temsp réel.



Autre possibilité : Utiliser RTX (www.vci.com). C'est un noyeau temps
réel, mais qui permet de continuer à faire tourner windows sur la même
machine (en fait, tout le scheduleur windows est considéré comme une
tâche peu prioritaire dans le scheduleur RTX). Il y a un coût de license
de dev, et un coût au runtime (genre 500€ par poste).

--
Loïc
Avatar
Aurelien REGAT-BARREL
> je ne pense qu'on puisse y arriver au niveau driver, il faut passer au
niveau kernel ( bon, la distinction, je dis peut-être une c...., je ne
suis pas spécialiste).



Heu oui j'ai du mal à te suivre. Pour moi driver = kernel land.

il me semble qu'il existe une version de windows plus adaptée, mais
destinée à être incorporée dans des dispositifs, donc non installable sur
un pc.
ou alors être sûr que la machine ne fera que çà.
par exemple au boulot, on a une application qui fait de l'acquisition par
port série, le pc ne fait que çà, et l' autre dispositif dispose d'une
mémoire tampon.
en cas de perte de communication, il peut y a voir saturation du tampon et
perte de données



Windows CE sûrement. Mais il vend pas la machine, ce qu'il vend c'est un
dispositif sans fil dont un émetteur / récepteur est branché au PC sur le
port série. Le dialogue entre les 2 utilise un protocole particulier dont le
temps entre les émissions / réceptions fait partie du protocole. C'est
destiné à un public non spécialiste, qui a déjà son ordi pour faire la
comptabilité de la boîte dans un coin auquel on va trouver une 2° utilité.
Par question de changer d'OS...
Le truc important c'est que ces transmissions son très brèves, quelques
secondes au max. Ca pilote un afficheur digital sans fil... Le texte de cet
afficheur est modifié selon la volonté du client, soit pas plus d'une ou 2
fois par jour... Donc dans une journée y'a 10 secondes où on veut utiliser
de manière précise le port série. Il le faut depuis un logiciel con comme
tout où il saisit la ligne à afficher et clic sur ok. La transmission est
quasi instantanée. Mais pour savoir si elle s'est bien passée ou pas, il
faut pouvoir chronométrer le temps entre 2 trames...

--
Aurélien REGAT-BARREL
Avatar
Aurelien REGAT-BARREL
>> - arriver à faire ça en soft (driver ?).



Ca n'est pas suffisant pour faire du temps réél.



Voir mon autre réponse pour + d'infos. Par temps réel, c'est juste prendre
la main sur tout le reste quelques secondes dans une journée...

Autre possibilité : Utiliser RTX (www.vci.com). C'est un noyeau temps
réel, mais qui permet de continuer à faire tourner windows sur la même
machine (en fait, tout le scheduleur windows est considéré comme une tâche
peu prioritaire dans le scheduleur RTX). Il y a un coût de license de dev,
et un coût au runtime (genre 500€ par poste).



Seulement j'ai peur que 500€ ne soit pas loin du prix du kit qu'il compte
vendre... Sans compter qu'il n'est pas question de toucher à l'OS du client.
Ca doit s'installer / se désisntaller en 2 clics. C'est une application
ultra light.

--
Aurélien REGAT-BARREL
Avatar
Loïc Joly
Aurelien REGAT-BARREL wrote:
- arriver à faire ça en soft (driver ?).



Ca n'est pas suffisant pour faire du temps réél.




Voir mon autre réponse pour + d'infos. Par temps réel, c'est juste prendre
la main sur tout le reste quelques secondes dans une journée...




Vu l'utilisation de ce que tu en dis dans un autre post, les temps
impliqués, la fréquence d'utilisation, les conséquences en cas
d'échec... Je me dis qu'en se mettant en priorité maximale, en faisant
une attente active, et en mesurant le délai avec les performance
counters, il y a une bonne probabilité que ça passe. Après, il faut voir
s'il y a une procédue simple en cas d'échec (genre on demande au client
de cliquer une deuxième fois sur le bouton... ou encore si on n'a pas eu
ce qu'on attendais au bout de n secondes, on recommence nous même).

Par contre, je n'ai pas d'expérience de l'écriture de drivers pour
savoir si ça peut aider. Intuitivement, je n'y crois pas beaucoup.


Autre possibilité : Utiliser RTX (www.vci.com). C'est un noyeau temps
réel, mais qui permet de continuer à faire tourner windows sur la même
machine (en fait, tout le scheduleur windows est considéré comme une tâche
peu prioritaire dans le scheduleur RTX). Il y a un coût de license de dev,
et un coût au runtime (genre 500€ par poste).




Seulement j'ai peur que 500€ ne soit pas loin du prix du kit qu'il compte
vendre...



S'il compte en vendre des milliers, il doit y avoir des prix avantageux.
A lui de se renseigner.

Sans compter qu'il n'est pas question de toucher à l'OS du client.
Ca doit s'installer / se désisntaller en 2 clics. C'est une application
ultra light.



Je ne me rapelle plus si l'installation est transparente ou pas. Tu peux
télécharger une démo pour vérifier.


--
Loïc
Avatar
Pierre Maurette
Loïc Joly a écrit:

Aurelien REGAT-BARREL wrote:
- arriver à faire ça en soft (driver ?).



Ca n'est pas suffisant pour faire du temps réél.




Voir mon autre réponse pour + d'infos. Par temps réel, c'est juste prendre
la main sur tout le reste quelques secondes dans une journée...




Vu l'utilisation de ce que tu en dis dans un autre post, les temps
impliqués, la fréquence d'utilisation, les conséquences en cas
d'échec... Je me dis qu'en se mettant en priorité maximale, en faisant
une attente active, et en mesurant le délai avec les performance
counters, il y a une bonne probabilité que ça passe. Après, il faut voir
s'il y a une procédue simple en cas d'échec (genre on demande au client
de cliquer une deuxième fois sur le bouton... ou encore si on n'a pas eu
ce qu'on attendais au bout de n secondes, on recommence nous même).


Je confirme pour l'avoir expérimenté sous Delphi (appli labo photo,
pour le fun). Plusieurs timers simultanés sans problème, en vérifiant
que les attentes actives (PerformanceCounters ou RDTSC en BASM) ne se
chevauchent pas. Ce qui serait possible, mais plus compliqué.
Il y a effectivement erreur détectable "de temps en temps".
Bizarrement, jouer sur les priorités d'appli et de threads ne semble
pas changer grand chose, mais je n'ai pas testé sur une machine
"chargée", en particulier par des accès disque.

Par contre, je n'ai pas d'expérience de l'écriture de drivers pour
savoir si ça peut aider. Intuitivement, je n'y crois pas beaucoup.


Si, on peut. Peut-être pas certifiés par Microsoft, mais on peut. On
peut même sans réellement écrire un vrai pilote passer en ring0 et
donc faire CLI/STI dans du code assembleur. Mais c'est un suicide
commercial ;-). En fait, les gens qui ont choisi XP doivent continuer
à avoir XP ...

Sans avoir étudié les détails de votre problème, je vous propose une
solution qui me paraît d'autant plus réaliste que votre
employeur/donneur d'ordre fait dans le hard. Vous faites un dongle
intermédiaire sur le port série en câblé/PLA ou avec un PIC bas de
gamme (faut quand même deux ports série), et vous discutez en
asynchrone avec ce dongle, par exemple avec des structures
temps/donnée. PIC pour PIC, vous pouvez certainement lui déléguer un
peu plus, comme l'envoi et la réception complets d'une trame, avec
gestion des han dshakes et des répétitions.
Le coût de revient d'un tel truc hors développement est peut-être de
l'ordre de 10 à 20 euros.

Désolé si je n'ai pas pigé votre problème et que je sui à coté de la
plaque.
--
Pierre
1 2