VBA et Qbasic avec MSCOMM

Messages postés
8
Date d'inscription
lundi 18 novembre 2002
Statut
Membre
Dernière intervention
5 juin 2003
-
Messages postés
1
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
20 novembre 2004
-
Bonjour
Je suis en train de développer une application qui permet d'envoyer des codes iso vers une le port RS232 d'une commande numérique de machine-outil via le port com d'un pc.
Actuellement cette tache est remplie par un programme en qbasic qui fonctionne sous dos (voir ci dessous).
Mon aplli. ne fonctionne pas sur toutes les commandes numériques et je ne comprends pas pourquoi puisque j'ai l'impression d'avoir programmé quelquechose de semblable. 5voir ci dessous)
Mon message est un appel à l'aide vers quelqu'un qui aurait des compétences dans les deux langages et qui pourrait m'indiquer en quoi je fais une erreur.

Programme qbasic fonctionnant actuellement :

1 REM PROG DNC XON/XOFF
6 ON ERROR GOTO 5000
10 SCREEN 0, 0: WIDTH 80
15 KEY OFF: CLS : CLOSE
20 DEFINT A-Z
25 LOCATE 25, 1
30 PRINT STRING$(60, " ")40 false 0: true NOT false
55 menu = 560 xoff$ CHR$(19): xon$ CHR$(17): eof$ = CHR$(4)
65 OPEN "pctty.par" FOR INPUT AS #5
66 REM pctty.par contient com1:9600,E,7,1,CD0,CS0,DS0,OP0,RS,TB1,RB1
70 LINE INPUT #5, comfile$
75 LINE INPUT #5, chemin$
100 LOCATE 25, 1: PRINT "Programme de transmission asynchrone xon/xoff vers DNC"
225 OPEN comfile$ FOR RANDOM AS #1
240 OPEN "scrn:" FOR OUTPUT AS #3
300 LOCATE 2, 1: PRINT comfile$: LOCATE 3, 35: PRINT " "
310 LOCATE 3, 1: LINE INPUT "fichier a transferer ? (Enter=fin): "; dskfil$
320 IF UCASE$(dskfil$) = "" GOTO 2060
420 OPEN chemin$ + dskfil$ + ".nc" FOR INPUT AS #2
430 LOCATE 4, 1: LINE INPUT "Mettre l'armoire DNC en r?ception (Enter quand pret)"; rep$
440 REM SUR 1000 ENVOYER CR/LF POUR AMORCER DNC
450 PRINT #1, CHR$(13);
460 PRINT #1, CHR$(10);
1000 WHILE NOT EOF(2)
1060 a$ = INPUT$(1, #2)
1080 PRINT #1, a$;
1125 PRINT #3, a$;
1226 b$ = INPUT$(LOC(1), #1)
1327 REM PRINT #3, b$;
1360 IF b$ = xoff$ GOTO 1380
1370 GOTO 1935
1380 b$ = INPUT$(LOC(1), #1)
1390 PRINT #3, "**** xoff ****";
1428 DO WHILE b$ <> xon$
1529 b$ = INPUT$(LOC(1), #1)
1731 LOOP
1832 PRINT #3, "++++ xon ++++ ";
1935 WEND
2040 PRINT #1, CHR$(28);
2050 CLOSE #2
2055 LINE INPUT "Transfert termin? (RETURN)"; rep$
2060 SYSTEM

5000 REM PRINT "Erreur "; errl; " ? la ligne "; ERL
5100 IF ERL = 65 THEN LINE INPUT "Fichier param?tre PCTTY.PAR inexistant (Enter)", rep$: RESUME 2060
5200 IF ERL = 225 THEN LINE INPUT "Erreur initialisation comx: (Enter)"; rep$: RESUME 2060
5300 IF ERL = 420 THEN PRINT chemin$ + dskfil$ + ".nc ": LINE INPUT "Fichier inexistant (Enter)"; rep$: RESUME 300
5400 LINE INPUT "Erreur non r?pertori?e (Enter)"; rep$: RESUME 2060

Procédure VBA devant le remplacer : (temp est une variable qui contient le nom du fichier à envoyer et est renseignée par un controle commondialog)

Public Sub FileTransfer_click(temp As String) 'Ok procédure octet par octet
Dim hSend, BufferSize, LF&
On Error Resume Next
MSComm1.PortOpen = True
If err Then
MsgBox "COM1: n'est pas disponible. Changez la propriété CommPort pour un autre port."
Exit Sub
End If
hSend = FreeFile
Open temp For Binary Access Read As hSend
If err Then
MsgBox Error$, 48
Else
' Lit le fichier par blocs de la taille du tampon de transmission.=1 octet
BufferSize = 1
LF& = LOF(hSend)
MSComm1.Output = Chr$(13)
MSComm1.Output = Chr$(10)

Do Until EOF(hSend) Or CancelSendNc
' Lit un octet de données. BSize = 1 octet
Dim OutString As String
OutString = Space$(BufferSize)
Get hSend, , OutString
' Transmet le bloc.
MSComm1.Output = OutString
Debug.Print OutString
If err Then
MsgBox Error$, 48
Exit Do
End If
' Attend que toutes les données soient transmises.
Do
Ret = DoEvents()
Loop Until fMainForm.MSComm1.OutBufferCount = 0 Or CancelSendNc
Loop
End If
MSComm1.Output = Chr$(28)
MSComm1.PortOpen = False
Close hSend
End Sub

Merci pour tout d'avance

4 réponses

Messages postés
44
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
13 avril 2004

salut!

Je n'ai pas encore vu ton prog qbasic, par contre j'ai jeté un regard sur le prog VB

vu ton prog VB, tu n'as pas activé les RTS DTS du port RS232, ie lorsque tu veut envoyer des données sur le port serie tu dois mettre RTS/DTS soit au niveau bas soit au niveau haut!

Ton erreur vient seulement de la, essaye de faire
MSCOMM.RTS=true
MSCOMM1.output=(ta trame)

Voila, :big)
Messages postés
8
Date d'inscription
lundi 18 novembre 2002
Statut
Membre
Dernière intervention
5 juin 2003

Bonjour

mscomm.rts n'existe pas
par contre mscomm.rtsenable existe et est positionné sur true
mais je ne vois pas en quoi cela changerai quelquechose cela dit je vais essayer cet après-midi
Messages postés
8
Date d'inscription
lundi 18 novembre 2002
Statut
Membre
Dernière intervention
5 juin 2003

Merci Slapinslug pour ta réponse. Le protocole RTS/CTS n'est pas utilisé et donc ton renseignement ne m'a pas été directement utile mais il m'a mis sur la voie. En fait il s'agissait d'un des fils des données entrantes ou sortante qui était désoudé sur la prise db9!!!

Merci pour tout
Messages postés
1
Date d'inscription
jeudi 4 novembre 2004
Statut
Membre
Dernière intervention
20 novembre 2004

Bonjour
je suis un étudiant en électronique et j'ai réaliser un petit projet qui consiste a commander un bras robot via le le port série rs232 et pour cela j'ai fait un programme sur vb6 et j'ai évidement utilisé l'outil MSCOMM ,le probleme c'est qu'un prof me demande de rajoute dans mon rapport l'explication detailler et approfendie de mscomm ,est ce que quelqu'un aurrait quelque chose pour m'aider svp!!!!!!!!!!!!!

merci d'avance