Étape 1: Visual Basic 6.0 (fabrication du DLL)
1. classe est indépendante, de déclarer des variables dans le privé (plus d’intimité)
2. n’acceptez pas d’objets dans la classe. Au lieu de cela, accepter de « variantes », puis « activés » à un objet privé déclarée.
Exemple :
Privé MC comme MSComm
Public sub InitializeClass (Byval fileName as String, MsComm comme variante) ' au lieu de
Public sub InitializeClass (Byval fileName as String, MsComm comme MSComm)
Ensuite, la valeur MC = MsComm
3. d’autres??? (J’ai seulement rencontré le problème énoncé à 2.)
Mon Servo Function
Private The_File As String, The_Section As String
Private MComm As MsComm, tBox As TextBox
TextLength privé aussi longtemps, Command As String
Private Declare Sub dormir Lib « kernel32 » (ByVal millisecondes As Long)
Private Declare Function GetPrivateProfileString Lib « kernel32 » Alias "GetPrivateProfileStringA" (ByVal IpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Const LocWordLength = 20
Public Sub InitServo(PortSettingFileName As String, FileSection As String, MsComm As Variant, txtBoxFeedback As Variant)
The_File = PortSettingFileName
The_Section = FileSection
Set MComm = MsComm
Définissez tBox = txtBoxFeedback
« Sortie chargé COMPORT paramètres
Journal "File:" & The_File & vbCrLf & "Section:" & The_Section
' Ouvrez compotier et connectez-vous avec Arduino
Avec MComm
If. PortOpen alors. PortOpen = False ' fermer et mettre le numéro de port com
. CommPort = SimpleGet("comport")
. Paramètres = SimpleGet("settings")
. EOFEnable = True
Journal "Com Port:" &. CommPort & vbCrLf & "paramètres:" &. Paramètres
Se termine par
SendData (« CO »)
End Sub
Public void SendData (ByVal Commandx As String)
On Error GoTo erreur
Commande = Commandx
« tout d’abord vérifier la commande
Commande = Trim(Command) ' se débarrasser des espaces supplémentaires sur le côté
Si (InStr (commande, "") <> 0) ou (Len(Command) > 10) puis
GoTo erreur "de ne pas envoyer si le format de la commande est erronée
End If
Dim i As Integer, Char As String
Pour i = 1 à 2 ' parce que la longueur d’ecpected caractère est seulement 2
Char = Mid (commande, i, 1)
Si (Char > = « A » Char et < = « Z ») puis "ne rien faire si les 2 premiers caractères alphabets
D’autre
GoTo erreur
End If
Prochaine je
Si InStr (Char, « C ») = 0 Then ' recherchez les chiffres pour les entrées non liés à CT et CO
Pour i = 3 pour Len(Command) ' s’assurer que le reste de la commande sont des entiers
Char = Mid (commande, i, 1)
Si (Char > = « 0 » et Char < = « 9 ») puis "ne rien faire si les caractères restants sont des chiffres
D’autre
GoTo erreur
End If
Prochaine je
End If
Si InStr (commande, « L ») = 0 Then ' si la commande ne demande pas de localisation
TextLength = Len(Command)
D’autre
TextLength = LocWordLength
End If
Avec MComm
. DTREnable = False
. RTSEnable = False ' désactiver la demande d’envoi de signal
If. PortOpen = False Then. PortOpen = True ' ouvrir le port
. Sortie = Commandx ' envoyer texte
. RThreshold = TextLength ' enregistrer envoyés de longueur de chaîne
End With ' quitter le port ouvert pour attendre signal écho de procéder
ServoOnComm
Exit Sub
Erreur :
Si (Err.Description) puis
MsgBox Err.Description
D’autre
MsgBox « La commande non valide! »
End If
End Sub
Private Sub Log(Text As String)
Sur erreur GoTo ERRR
tBox.Text = texte & vbCrLf & tBox.Text
Exit Sub
EUH :
MsgBox "erreur lors de l’enregistrement:" & Err.Description
Resume Next
End Sub
' Fonction OnComm manuelle pour détecter l’écho d’envoyé des données
Private Sub ServoOnComm()
Dim chaîneEntrée As String
Faire
DoEvents
Boucle jusqu'à ce que MComm.CommEvent = comEvReceive MComm.InBufferCount et > = TextLength
Sommeil (5)
Si TextLength = LocWordLength Then ' attendre caractères restants atteindre le tampon
Sommeil (30)
End If
« Récupérer toutes les données disponibles.
MComm.InputLen = 0
« Recherchez les données.
Si MComm.InBufferCount > 0 Then ' lire les données.
InString = MComm.Input
' vérifier si les données reçues est comme prévu
Si InStr (InString, commande) > 0 Then ' si la commande est un écho
ElseIf InStr(Command, "L") <> 0 puis ' si commande original a L echo est longue
Si Len(InString) > = LocWordLength Then
End If
D’autre
GoTo erreur
End If
Si Len(InString) > 0 Then ' écho de sortie sur textbox
tBox.Text = InString & tBox.Text
End If
End If
Si MComm.PortOpen alors MComm.PortOpen = False ' fermer le port après avoir reçu la réponse
Exit Sub
Erreur :
MsgBox « erreur! »
End Sub
Public void ExitServo()
SendData (« CT »)
Si MComm.PortOpen alors MComm.PortOpen = False ' si le port est ouvert, fermez si avant sortie
"peut-être peut ajouter au servo de maison avant de repartir
End Sub
Public void SimpleGet (VarName As String) As String
SLocalBuffer public static String * 500
Dim l As Integer
l = GetPrivateProfileString (The_Section, VarName, vbNullString, sLocalBuffer, The_File, 500)
SimpleGet = Left$ (sLocalBuffer, l)
End Function