getstr et putstr

Applications, examples, and sample programs using products from Comfile Technology

getstr et putstr

Postby Sonda » Sun Oct 02, 2011 9:35 am

Bonjour,

Je travaille avec un cb220B, je veux récupérer la distance séparant l'obstacle détecté par un ultrason et le capteur.
J'ai trouvé un programme qui le fait et qui utilise getstr. Lorsque j'affiche le résultat avec la commande debug tout marche bien mais lorsque j'envoi le résultat sur le port RS232 avec la commande putstr, je ne peux plus la récupérer. Après plusieurs tests j'ai remarqué que je peux envoyer n'importe quelle variable à condition qu'elle n'a aucune relation avec la valeur récupérer par getstr.
Je suis vraiment bloqué à ce niveau, je ne sais plus quoi faire pour que je puisse envoyer et récupérer le résultat sans aucun problème.
NB. Le programme avec le quel je récupère le résultat est Matlab.

Merci pour toute réponse.
SVP aidez moi :)
Sonda
Terminator
 
Posts: 13
Joined: Thu Sep 08, 2011 6:21 am

Re: getstr et putstr

Postby David » Sun Oct 02, 2011 10:03 am

Can you post a sample of your code.

David
David
SuperDuperDuper
 
Posts: 120
Joined: Wed Mar 28, 2007 1:43 pm
Location: KIldare,Ireland

Re: getstr et putstr

Postby Sonda » Sun Oct 02, 2011 2:24 pm

Bonjour,
voila mon code basic:

Const Device = CB220
'Set Display 0, 1, 9600, 60
Opencom 0,9600,3,50,50 ' Initialisation pour série
Input 3
Dim cm1 As Byte
Dim inch As String*5
Dim inch2 As String
Dim i As Integer

For i=0 To 500
Bclr 0,0
High 3
Low 3
Delay 100
inch= Getstr(0,4)
inch2 = Right(inch,3)
cm1 = Val(inch2)
Delay 1000
Put 0,cm1,2
'Put 0,i,2
Next

NB: lorsque je récupère i, tout va bien mais le problème lorsque je récupère cm1 ou inch2
Sonda
Terminator
 
Posts: 13
Joined: Thu Sep 08, 2011 6:21 am

Re: getstr et putstr

Postby David » Mon Oct 03, 2011 1:37 am

Try this

David

Code: Select all
Const Device = CB220
'Set Display 0, 1, 9600, 60
Opencom 0,9600,3,50,50    ' Initialisation pour série
Input 3
'Dim cm1 As Byte' Here cm1 is one byte
Dim cm1 As Integer' Here cm1 is two bytes

Dim inch As String*5
Dim inch2 As String
Dim i As Integer

For i=0 To 500
   Bclr 0,0
   High 3
   Low 3
   Delay 100
   inch= Getstr(0,4)
   inch2 = Right(inch,3)
   cm1 = Val(inch2)
   Delay 1000
   Put 0,cm1,2
   'Put 0,i,2
Next
David
SuperDuperDuper
 
Posts: 120
Joined: Wed Mar 28, 2007 1:43 pm
Location: KIldare,Ireland

Re: getstr et putstr

Postby Sonda » Mon Oct 03, 2011 6:40 am

Merci pour votre réponse, mais même avec ce changement rien n'a été changé au niveau du résultat.
J'ai testé même d'envoyé directement la variable inch2 en utilisant putstr mais de même problème persiste.
Le problème vient de l'instruction getstr, par ce que lorsque je remplace getstr par une constante par exemple inch = "R059", le programme tourne normalement et je peux récupérer la valeur de la distance par matlab sans aucun problème.

j'ai testé de travailler avec des interruptions, ici le programme entre dans sous-routine GOTDATA et ne retourne jamais au programme principale. Je ne sais même si c'est une solution pour mon problème ou non.

Const Device = cb220

Dim A As String * 10
Opencom 1,115200,3,50,10

High 3
On Recv1 Gosub GOTDATA
Set Until 1,8
Do
Do While In(3) = 0 ' Attend jusqu' ce qu'un BP connecté sur P0 soit sollicité
'Debug "do",Cr
Loop
Putstr 0,"CUBLOC",Cr
Debug "putstr",Cr

Do While In(3) = 1
Loop
Loop
GOTDATA:
A=Getstr(1 ,8)
Debug "A = ",A
Delay 500
Return


GOTDATA:
A=Getstr(0 ,8)
Debug "A = ",A
Delay 500
Return
Sonda
Terminator
 
Posts: 13
Joined: Thu Sep 08, 2011 6:21 am

Re: getstr et putstr

Postby terrydebriere » Tue Oct 04, 2011 4:49 am

Sonda,
Ce code a fonctionné pour moi. Remarquez que j'ai une ct1720 et non pas un cb220. Code devraient être identiques pour cela. Assurez-vous que vous êtes dans le mode RS232 et non le mode RS485.

J'espère que cela fonctionne sur le cb220. Quand je tape 12345678 à Terra terminal pour simuler Matlab, je serai de retour pour les 12 345 pouce2 suivie par 345 pour cm1.

Const Device = CT1720 '(CB220)
Dim A As String * 10
Dim Inch As String*5
Dim Inch2 As String
Dim cm1 As Integer
Opencom 1,9600,3,50,10

High 3
On Recv1 Gosub GOTDATA
Set Until 1,8
Do
Do While In(3) = 0 ' Attend jusqu' ce qu'un BP connecté sur P0 soit sollicité
'Debug "do",Cr
Delay 250
Loop
Putstr 1,"CUBLOC",Cr
Do While In(3) = 1
Loop
Loop
GOTDATA:
Inch=Getstr(1 ,8)
Inch2 = Right(Inch,3)
cm1 = Val(Inch2)
Putstr 1,Inch,Cr
Putstr 1,Inch2,Cr
Put 1,cm1,1

Delay 500
Return
terrydebriere
Terminator
 
Posts: 8
Joined: Sat Jul 23, 2011 4:57 pm

Re: getstr et putstr

Postby terrydebriere » Tue Oct 04, 2011 5:03 am

Sonda,
Une autre pensée. Debug doit être sur un autre port série (canal) que l'getstr et putStr.
Terry DeBriere
terrydebriere
Terminator
 
Posts: 8
Joined: Sat Jul 23, 2011 4:57 pm

Re: getstr et putstr

Postby Sonda » Tue Oct 04, 2011 5:51 am

Bonjour,

Merci pour votre réponse. J'ai mis le même code que vous avez testé mais malheureusement ca marche pas. J'ai remarqué qu'il n'exécute pas la partie du code de GOTDATA:, toujours il exécute la première partie du code (affichage "cubloc").
a propos le port, c'est vrai pour debug j'utilise le port 1 et pour envoyer sur le port RS232 j'utilise le port 0.
vraiment je ne sais pas d'où il vient le problème.
SVP, connaissez vous une méthode qui me permet d'enregistre ces données "cm1 ou inch2" dans un fichier afin de les traiter ultérieurement par matlab. C'est ca mon objectif final que je cherche à le résoudre.
Sonda
Terminator
 
Posts: 13
Joined: Thu Sep 08, 2011 6:21 am

Re: getstr et putstr

Postby Sonda » Thu Oct 06, 2011 2:55 am

Bonjour,
voila j'ai encore un problème au niveau de mon code, maintenant j'ai réussi à envoyer le contenu de la variable cm2, mais le problème dans sa récupération par matlab. En fait, il m'affiche des valeurs incorrects.

voila le code Basic :

Const Device = CB220

Dim cm1 As Byte
Dim cm2 As Single
Dim inch As String*5

Opencom 0,9600,3,50,20 ' Initialisation pour série

Low 3 ' Configure port en sortie et stop mesure distance
Delay 500

'Delay 1000
Do
High 3 ' Lance la mesure de distance
Low 3 ' Stop la mesure
Delay 100
inch = Getstr(0,4)
cm1 = Val(Right(inch,3))
cm2 = cm1 *2.54
Putstr 0,Float cm2,1
Delay 1000
Loop

et je vous donne aussi mon code Matlab qui permet de récupérer la valeur de cm2:
clc
clear all ;
close all;

% Create a serial port object.
obj1 = instrfind('Type', 'serial', 'Port', 'COM4', 'Tag', '');

% Create the serial port object if it does not exist
% otherwise use the object that was found.
if isempty(obj1)
obj1 = serial('COM4','BaudRate',9600);
else
fclose(obj1);
obj1 = obj1(1);
end
obj1.InputBufferSize = 9600*8;

%Connect to instrument object, obj1.
fopen(obj1);

% récupération à partir du port rs232
data=fscanf(obj1)

fclose(obj1);

SVP, avez vous une idée ou même une proposition qui peut m'aider.
Sonda
Terminator
 
Posts: 13
Joined: Thu Sep 08, 2011 6:21 am


Return to Applications and Examples

Who is online

Users browsing this forum: No registered users and 1 guest

cron