|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Problème d'ajout Port serie |
Débuté par Anthony, 20 nov. 2017 20:04 - 6 réponses |
| |
| | | |
|
| |
Posté le 20 novembre 2017 - 20:04 |
Bonjour,
Je doit développer un petit programme pour le boulot. Le logiciel consiste a lire sur un port série et à l'affichée dans un champ puis de l'enregistrer dans une base de donnée.
Mon problème est que lorsque j'enregistre les données reçu du port série grâce a "Sévèrement" l'enregistrement dans la base de donnée est fait n'importe comment, sois il manque des caractère ou alors il enregistre dans sur 2 ligne au lieu de 1 ou alors il enregistre 1 caractère est il va à la ligne .
ma procédure de lecture est la suivante Code de la procédure local
LigneCom1 est un booléen nCom est une entier
TempBuffer = ""
nCom = 1
sFerme(nCom)
LigneCom1 = sOuvre(nCom, 6000, 6000,0,1) SI LigneCom1 = Vrai ALORS sFixeParamètre(nCom, 9600 1, 8, 2, 1, 0,0) sEvénement(1,sEveCaractèreReçu,"Lecture") SINON Erreur("Erreur d'ouverture de COM1") FIN Info("Initialisation terminée")
Procedure Lecture OctetsLus est un entier Str est une chaîne i est un entier OctetsLus = sDansFileEntrée (NumPort) Str = sLit (NumPort ,OctetsLus) TempBuffer = TempBuffer + Str sai_Trame = TempBuffer TempBuffer2 = Str Sauvegarde_trame.Trame = TempBuffer2 HAjoute(Sauvegarde_trame)
i++ SI i > 40 ALORS FIN
FIN
Merci de votre aide cela fait un moment que je cherche sur internet je ne suis pas un professionnel et je programme avec WinDev 21 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 20 novembre 2017 - 22:41 |
| |
| |
| | | |
|
| | |
| |
Posté le 21 novembre 2017 - 00:41 |
Le message que je reçoit et de la forme suivante : 21/11/2017 14:23:55 emis -->C300 21/11/2017 14:23:55 message recu arriver voiture Num 13335-111 21/11/2017 14:23:56 reçu --> C300 Etc ......
Mon problème est que l'affichage dans mon champ de saisie fonctionne bien mais l'enregistrement dans ma base de donnée ne corresponds pas a ce qui est affiché dans le de saisie. Par exemple: 21/11/2017 14: 23:55 emi
s --> C300 21/11/2017 14:23:55 message recu arriver voiture Num 133 21/11/2017 14:23:56 reçu
Se que je comprend pas ces pourquoi j'ai une difference entre l'affichage dans le champ saisie et l'enregistrement dans ma base de donnée. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 102 messages Popularité : +4 (6 votes) |
|
Posté le 21 novembre 2017 - 11:44 |
Bonjour,
C'est normal, tu fais le hajoute() sur réception d'un caractère du port série. Si la réception se fait en plusieurs fois, tu ajoutes un enregistrement pour chaque paquet.
Dans ta procédure Lecture :
OctetsLus est un entier Str est une chaîne i est un entier
OctetsLus = sDansFileEntrée (NumPort)
tantque octetslus > 0
Str = sLit (NumPort ,OctetsLus) TempBuffer += Str
fin
hraz(Sauvegarde_trame)
sai_Trame = TempBuffer TempBuffer2 = Str Sauvegarde_trame.Trame = TempBuffer2 HAjoute(Sauvegarde_trame)
Regarde, il y a des exemples qu'ils n'y a plus qu'a adapter.
-- Cordialement.
Karl |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 24 messages Popularité : +1 (1 vote) |
|
Posté le 21 novembre 2017 - 12:40 |
Bonjour, j'ai essayer votre code sur un émulateur de port série, j'ai du enlever la boucle "TANTQUE" car cela ne fonctionner pas.
voila le code qui fonctionne avec l’émulateur :
Procedure Lecture_Serie()
OctetsLus est un entier Str est une chaîne OctetsLus = sDansFileEntrée (1)
Str = sLit (1 ,OctetsLus) TempBuffer += Str HRAZ(Sauvegarde_Trame)
SAI_Affichage = TempBuffer TempBuffer2 = Str
Sauvegarde_Trame.Trame=TempBuffer2 Sauvegarde_Trame.Date=DateSys() Sauvegarde_Trame.Heure=HeureSys() HAjoute(Sauvegarde_Trame)
i++ SI i > 25 ALORS TempBuffer = TempBuffer[[25 A ]] SAI_Affichage=TempBuffer SINON SAI_Affichage=TempBuffer FIN
Je vais essayer de tester le code sur la machine pour demain |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 24 messages Popularité : +1 (1 vote) |
|
Posté le 21 novembre 2017 - 23:49 |
Bonjour Cela ne fonctionne pas sur la machine je n'arrive pas a enregistrer les trames que je reçoit. sur le simulateur aucun problème, mais lors que je l'installe sur la machine cela m'enregistre n'importe quoi
j'ai essayer de faire : POUR TOUTE chaîne sMachaine de TempBuffer SEPAREE PAR RC Sauvegarde_Trame.Trame=TempBuffer2 Sauvegarde_Trame.Date=DateSys() Sauvegarde_Trame.Heure=HeureSys() HAjoute(Sauvegarde_Trame) FIN
Même problème j'ai essayer de remplacer RC par un code ascii toujours le même problème. lorsque j'enregistre dans un fichier texte avec fEcritLigne pas de problème cela m'enregistre tout ligne par ligne correctement |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 24 messages Popularité : +1 (1 vote) |
|
Posté le 22 novembre 2017 - 00:56 |
Re bonjour , J'ai trouver pourquoi il enregistre n'importe quoi dans la base de donné. Lorsque je regarde ma variable TempBuffer2 de plus prêt, je l'affiche dans champ de saisie. Elle affiche par exemple "22/11/17" puis elle s'efface puis affiche la suite du message. Mais maintenant je ne sais pas comment remédier a mon problème est ce que quelqu'un peut m'aider car je suis vraiment perdu merci d'avance |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|