MSComm1(z).Output = "SEND" & vbCr
Private Sub timerStep_Timer(index As Integer) On Error Resume Next 'si le port est déjà ouvert il passe à la ligne d'après, sinon il l'ouvre MSComm1(z).PortOpen = True 'si erreur ici il va à la ligne suivante MSComm1(z).Output = "SEND" & vbCr End Sub
Option Explicit Dim InputDat(11) As String Dim RecvDat(11) As String Dim SendDat(11) As String Dim FlagEsc(11) As Boolean Dim inidata(11) As String 'Valeurs pour fichier .ini Dim FlagChange(11) As Boolean 'Variable pour détecter le changement dans les txtBox Dim FlagExperiment(11) As Boolean 'Variable pour détecter une expérimentation en cours Dim DataNum(11) As Long Dim NextTime(11) As Double Private Sub timerStep_Timer(index As Integer) MSComm1(z).Output = "SEND" & vbCr End Sub Public Sub loadINI() Dim x As Integer For x = 0 To 11 iniScaleName(x) = GetINISetting("Balance" & x, "ScaleName", App.Path & "\SETTINGS.INI") If iniScaleName(x) "" Then iniScaleName(x) "Balance" iniComPort(x) = GetINISetting("Balance" & x, "ComPort", App.Path & "\SETTINGS.INI") If iniComPort(x) "" Then iniComPort(x) defaultComPort iniBaudRate(x) = GetINISetting("Balance" & x, "BaudRate", App.Path & "\SETTINGS.INI") If iniBaudRate(x) "" Then iniBaudRate(x) defaultBaudRate iniDataBits(x) = GetINISetting("Balance" & x, "DataBits", App.Path & "\SETTINGS.INI") If iniDataBits(x) "" Then iniDataBits(x) defaultDataBits iniParity(x) = GetINISetting("Balance" & x, "Parity", App.Path & "\SETTINGS.INI") If iniParity(x) "" Then iniParity(x) defaultParity iniStopBits(x) = GetINISetting("Balance" & x, "StopBits", App.Path & "\SETTINGS.INI") If iniStopBits(x) "" Then iniStopBits(x) defaultStopBits iniFluxControl(x) = GetINISetting("Balance" & x, "FluxControl", App.Path & "\SETTINGS.INI") If iniFluxControl(x) "" Then iniFluxControl(x) defaultFluxControl DoEvents Next x End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionTu peux faire un contrôle utilisateur pour une balance
? maVariablepour qu'elle s'inscrive dans la fenêtre.
il n'y a aucune raison qu'un port série se ferme seul, jamais vu ça
Mais a première vue t'as essayé de faire une opération (lecture ou écriture) sans que le port en question soit ouvert.
Essaye d'ouvrir tous les ports dans ton Private Sub Form_Load()
Juste pour voir s'il fait la même erreur.
Tu peux faire un contrôle utilisateur pour une balance, ensuite, tu peux charger dynamiquement les balances, et chaque contrôle gèrera sa propre connexion série.
et pour switcher, tu joues sur la visibilité du contrôle par exemple.
Lances-tu du code lors de ces changements d'onglet ?
Touche t-il la communication d'une des balances ?
Le code que tu nous as montré n'a rien à voir avec la COM.
Que sont ces variables que tu renseignes à partir de tes fichiers INI ? Comment sont-elles dimensionnées et utilisées ?
Private Sub MScomm1(index as Integer)
If iniDataBits(x) = "" Then
je suis étonne de voir qu'il puisse s'agir d'une variable de type String (inadapté).
Survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
t'as essayé de faire une opération (lecture ou écriture) sans que le port en question soit ouvert
Private Sub MSComm1_OnComm(index As Integer) Dim ret As Integer Select Case MSComm1(z).CommEvent Case comEventRxOver ret = MsgBox("Input Buffer Overflowed !", 16) Case Is > 10 ret = MsgBox("Communication Error " & CStr(MSComm1(z).CommEvent) & " !", 16) Case comEvReceive InputDat(z) = MSComm1(z).Input If FlagEsc(z) Then Select Case InputDat(z) Case "D" RecvDat(z) = RecvDat(z) + Date$ Case "T" RecvDat(z) = RecvDat(z) + Time$ End Select FlagEsc(z) = False Debug.Print RecvDat(z) Debug.Print InputDat(z) Else Select Case InputDat(z) Case Chr$(13) '<CR> ConvDat(z) = RecvDat(z) RecvDat(z) = "" If chkTime(z).Value Then ConvDat(z) = ConvDat(z) + "," + Time$ End If If chkDate(z).Value Then ConvDat(z) = ConvDat(z) + "," + Date$ End If If chkSeqNum(z).Value = 1 Then DataNum(z) = DataNum(z) + 1 ConvDat(z) = ConvDat(z) + "," + CStr(DataNum(z)) End If DoEvents RichTextBox(z).UpTo Chr$(255), True, False RichTextBox(z).SelText = ConvDat(z) & Chr(13) & Chr(10) Case Chr$(10) '<LF> Case Chr$(6) ' RecvDat(z) = RecvDat(z) + "" Case Chr$(27) FlagEsc(z) = True Case Else RecvDat(z) = RecvDat(z) + InputDat(z) End Select End If Case comEvSend End Select End Sub
Private Sub SSTab1_Click(PreviousTab As Integer) z = SSTab1.Tab Debug.Print "CurrentTab: " & z End Sub