Transfert fichier texte vers com

Slapinslug Messages postés 8 Date d'inscription lundi 18 novembre 2002 Statut Membre Dernière intervention 5 juin 2003 - 5 juin 2003 à 20:17
cs_BFR Messages postés 88 Date d'inscription mardi 30 juillet 2002 Statut Membre Dernière intervention 1 mars 2008 - 5 juin 2003 à 23:07
8-)
Je développe une application dont le but est de transmettre un fichier iso vers une commande numérique de machine outil. Tout marche parfaitement à l'exception près que j'ai installé l'application sur des PC Pentium 120 sous win 95.
Le transfert ne se fait pas à la vitesse de transmission paramétrée sur le port com et dans le cas de fichiers longs, la transmission se met à ralentir de plus en plus jusqu'à echouer. Je pensais qu'il s'agissait d'un manque de mémoire RAM mais il s'avère que ce n'est pas le cas.
Une application existante déjà sous dos fait la meme chose et elle fonctionne parfaitement à la vitesse indiquée. Je ne comprends pas ce ralentissement et ceci est surement lié à une subtilité que je ne saisis pas dans l'instruction open for binary access ou bien dans le paramétrage du port com.

La procédure qui suit est celle que j'utilise temp est le chemin du fichier que je transmet .
Merci d'avance pour votre aide.

Public Sub FileTransfer_click(temp As String) 'Ok procédure octet par octet
Dim hSend, BufferSize, LF&
On Error Resume Next
fMainForm.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
'Affiche la boîte de dialogue Annuler.
CancelSendNc = False
frmCancelSend.Label1.Caption = "Transmission du fichier - " + fMainForm.RichTextBox2.FileName
frmCancelSend.Show
' Lit le fichier par blocs de la taille du tampon de transmission.=1 octet
BufferSize = 1
LF& = LOF(hSend)

frmCancelSend.ProgressBar1.Max = LF&
frmCancelSend.ProgressBar1.Visible = True

fMainForm.MSComm1.Output = Chr$(13)
fMainForm.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.
fMainForm.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
fMainForm.MSComm1.PortOpen = False
Close hSend
CancelSendNc = True
frmCancelSend.Hide
End Sub

1 réponse

cs_BFR Messages postés 88 Date d'inscription mardi 30 juillet 2002 Statut Membre Dernière intervention 1 mars 2008
5 juin 2003 à 23:07
c'est juste un aperçu d'une source avec VBA pour EXCEL pour le transfert de fichier ISO sur une CN de type NUM 1060T avec
MsComm1 si cela peut etre utile pour me contacter ou avoir d'autre renseignement
Fburl@aol.com
salutations.

Option Explicit
'-Declarations
'-Var
Dim NomFichier As String
'-Objet
Dim Com As MSComm

'P est la parité
'E: paire
'M: marque
'N: aucune
'O: impaire
'S: espace
Private Sub CommandButton1_Click()
On Error Resume Next
'-Déclaration
Dim Buffer As String
'-Affectation Objet
Set Com = Feuil1.MSComm1

'-OUVERTURE DU PORT
'-Test:détecte si le port n’est pas déjà ouvert
If Com.PortOpen Then Com.PortOpen = False

'-Test:Existance chemin du fichier
If NomFichier = "" Then
MsgBox ("Il n'y à pas de fichier à charger"), 64, ("Erreur")
Exit Sub
End If



'-Ouvre le port
With Com
.InBufferCount = 0 '-Vider le buffer
.OutBufferSize = 512 '-????
.CommPort = 1 '-N° du port
.Handshaking = 2 '-Protocole (ComRTS)
'.InputLen = 0 '-La valeur par défaut de la propriété InputLen est 0. Définir InputLen à 0 fera que
'le contrôle MSComm lira la totalité du buffer de réception quand Input est utilisé.
'Cette propriété est très utilisée quand on lit les données sur une machine qui envoi
'les données formatées en blocs de longueur fixe.
'.RThreshold = 1 '-Signal que l'événement CommEvent sera déclenché dés que 1 caractère seront en entrée
.Settings = "9600,e,7,1"
.SThreshold = 1 '-Définit/Renvoit le Nbres minimal de caractères permis à l'émission
.PortOpen = True '-Ouvre le port
'-Garde les valeurs par défaut de tous les autres paramètres.
End With

'-Declaration
Dim Canal As Integer
Dim Chaine As String

'-Ouvrir le fichier
Canal = FreeFile
Open NomFichier For Binary As #Canal

'-Création du tampon texte pour lire le fichier par bloc de 512 Octets
Chaine = Space$(512)

Do While Not EOF(Canal)

'-Charger les blocs dans une chaîne
Get #Canal, , Chaine

'-Charger la chaine des "blocs"
Com.Output = Chaine
Loop
'-Fermer le fichier
Close Canal
'-******************************************************

'-Charger le caractère de fin de fichier
Com.Output = Chr$(19)


'-Fermer le port
Com.PortOpen = False
'-Destruction Objet
Set Com = Nothing

'-INFO:
Range("H6").Select
Range("H6").Value = "Fichier charger"
'-Effacer
TextBox1 = ""


End Sub
0
Rejoignez-nous