Récupération d'un poids via liaison série avec une balance
Bonjour,
Je dispose d'une balance HLD600 Dini ARGEO connectée via une liaison RS23/USB à mon ordinateur. L documentation es trouvable sur internet mais je ne peux pas insérer de lien. Les paramètres de communication sont donc :
Baud : 9600 - Bit : 8 - Parité : N - Bit Stop : 1Je souhaite récupérer les valeurs de poids envoyées par la balance périodiquement pendant 30 minutes. J'ai cherché une façon de communiquer avec un port COM et je suis tombé sur ce github : Serial-Ports-in-VBA-new-for-2022
Je tente tant bien que mal de comprendre et de m'approprier les différentes fonctions mais je sèche. Parfois je réussi à avoir des valeurs via mon code VBA, parfois la liaison avec le port COM semble être interrompue. J'obtiens une erreur d'exécution n°9 car la variable X, contenant la lecture du port COM, est vide ne permettant pas d'obtenir un tableau par la suite.
Voici mon code :
Sub Port1()
Temps_Restant = TimeValue("00:00:30")
Range("B3").NumberFormat = "[$-F400]h:mm:ss AM/PM" 'Formatage Cellule "00:00:00".
Range("B3").Value = Temps_Restant
Call Port2
End Sub
Sub Port2()
Range("B3").NumberFormat = "[$-F400]h:mm:ss AM/PM" 'Formatage Cellule "00:00:00".
Temps_Restant = Range("B3").Value 'Récupération de la variable Temps_Restant
START_COM_PORT (11)
WAIT_COM_PORT (11)
X = READ_COM_PORT(11)
STOP_COM_PORT (11)
Tableau = Split(X, "GS")
Poids = Val(Tableau(1))
Range("B2").Value = Poids
If Temps_Restant = 0 Then
Call Port3
Exit Sub
End If
Temps_Restant = Temps_Restant - TimeValue("00:00:01") 'Décrémentation du compteur.
Range("B3").Value = Temps_Restant 'Mise à jour du compteur sur la feuille active.
Application.OnTime Now + TimeValue("00:00:01"), "Port2" 'Temporisation d'une seconde.
End Sub
Sub Port3()
'TRAITEMENT DES DONNEES.
End SubLa bonne nouvelle c'est que la fonction "Timer" fonctionne. :P
Pour info, la balance envoi la mesure du poids en continue sous la forme suivante :
"S 0.0g <---------- La Lecture se fait à n'importe qu'elle moment de la chaîne de caractère.
ST,GS 0.0g
ST,GS 0.0g
ST,GS 0.0g
ST,GS 0.0g
ST,GS 0.0g
ST,GS 0.0g
ST,GS 0.0g
ST,GS 0.0g
Etc...Merci de l'aide que vous pourrez m'apporter.
Bonne journée.
bonjour,
essaie ceci,
Sub Port2()
Range("B3").NumberFormat = "[$-F400]h:mm:ss AM/PM" 'Formatage Cellule "00:00:00".
Temps_Restant = Range("B3").Value 'Récupération de la variable Temps_Restant
START_COM_PORT (11)
WAIT_COM_PORT (11)
x = READ_COM_PORT(11)
STOP_COM_PORT (11)
If InStr(x, "GS") > 0 Then
Tableau = Split(x, "GS")
Poids = Val(Tableau(1))
Range("B2").Value = Poids
End If
If Temps_Restant = 0 Then
Call Port3
Exit Sub
End If
Temps_Restant = Temps_Restant - TimeValue("00:00:01") 'Décrémentation du compteur.
Range("B3").Value = Temps_Restant 'Mise à jour du compteur sur la feuille active.
Application.OnTime Now + TimeValue("00:00:01"), "Port2" 'Temporisation d'une seconde.
End Sub