begin process at 2008 08 20 02:38:41
1 228 657 membres
37 nouveaux aujourd'hui
14 254 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ENVOIS D'UNE COTE VIA RS 232


Information sur la source

Catégorie :PPC :: WCE 3.0 :: EVB Classé sous : rs232, port, série, communication, checksum Niveau : Débutant Date de création : 18/06/2003 Date de mise à jour : 18/06/2003 13:46:58 Vu : 8 185

Note :
7,5 / 10 - par 2 personnes
7,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

Description

Ce code envoie une impulsion reçue en cm, via RS 232.
Une valeur supérieure à 255 sera decoupée, et envoyé, un checksum permet de vérifer la trame envoyée.

Source

  • Private Sub Send(impulsion As Integer)
  • Dim MSB As Byte, LSB As Byte, CHKSUM As Byte
  • Dim tmp, heure, I
  • Dim vdist As Integer, vdimmin As Integer
  • Dim recu, tmpstr As String
  • tmp = 0
  • vdist = dist / 10
  • vdimmin = dimmin
  • impulsion = (impulsion * 10) - vdimmin
  • impulsion = Int((200 / vdist) * impulsion)
  • 'Decoupage de l'impulsion car > a 255
  • MSB = Int(impulsion / 256)
  • LSB = Int(impulsion - (MSB * 256))
  • If LSB = 0 Then
  • LSB = LSB + 1
  • End If
  • CHKSUM = MSB + LSB
  • 'Pour eviter un Checksum erronné
  • While CHKSUM > 255
  • CHKSUM = CHKSUM - 256
  • Wend
  • 'debug de verification
  • 'MsgBox "MSB : " & MSB
  • 'MsgBox "LSB : " & LSB
  • 'MsgBox "Check Sum : " & CHKSUM
  • 'J'effectue ici nu petite boucle d'envoi x10, car timeout non codé
  • Do While tmp <> 10
  • 'Interdiction des interuptions sur le port
  • Comm1.RThreshold = 0
  • 'Le caractere "D" symbolise le debut de la trame
  • Comm1.Output = "D"
  • Comm1.Output = Chr(MSB)
  • Comm1.Output = Chr(LSB)
  • Comm1.Output = Chr(CHKSUM)
  • tmp = tmp + 1
  • I = 0
  • Effectue = ""
  • 'Attente d'une reponse (p'tite bidouille)
  • Do While I < 500
  • Effectue = Comm1.Input
  • If Effectue <> "" Then Exit Do
  • I = I + 1
  • Loop
  • 'Remise en marche des interruptions sur le port
  • Comm1.RThreshold = 1
  • If Effectue = "O" Then Exit Sub
  • Loop
  • 'si 10 envois ont été tentés sans réponse reçue : y'a un prob
  • If tmp = 10 Then
  • MsgBox "Un problème empêche la transmission.", vbCritical, "Delai d'attente dépassé !"
  • Exit Sub
  • End If
  • End Sub
Private Sub Send(impulsion As Integer)
Dim MSB As Byte, LSB As Byte, CHKSUM As Byte
Dim tmp, heure, I
Dim vdist As Integer, vdimmin As Integer
Dim recu, tmpstr As String
    
tmp = 0
vdist = dist / 10
vdimmin = dimmin

impulsion = (impulsion * 10) - vdimmin
impulsion = Int((200 / vdist) * impulsion)

'Decoupage de l'impulsion car > a 255
MSB = Int(impulsion / 256)
LSB = Int(impulsion - (MSB * 256))

If LSB = 0 Then
    LSB = LSB + 1
End If

CHKSUM = MSB + LSB

'Pour eviter un Checksum erronné
While CHKSUM > 255
  CHKSUM = CHKSUM - 256
Wend

'debug de verification
'MsgBox "MSB : " & MSB
'MsgBox "LSB : " & LSB
'MsgBox "Check Sum : " & CHKSUM

'J'effectue ici nu petite boucle d'envoi x10, car timeout non codé
Do While tmp <> 10

'Interdiction des interuptions sur le port
    Comm1.RThreshold = 0

'Le caractere "D" symbolise le debut de la trame
    Comm1.Output = "D"
    Comm1.Output = Chr(MSB)
    Comm1.Output = Chr(LSB)
    Comm1.Output = Chr(CHKSUM)
    
    tmp = tmp + 1
    I = 0
    Effectue = ""

'Attente d'une reponse (p'tite bidouille)
    Do While I < 500
      Effectue = Comm1.Input
      If Effectue <> "" Then Exit Do
      I = I + 1
    Loop
'Remise en marche des interruptions sur le port
    Comm1.RThreshold = 1

    If Effectue = "O" Then Exit Sub
Loop

'si 10 envois ont été tentés sans réponse reçue : y'a un prob
If tmp = 10 Then
    MsgBox "Un problème empêche la transmission.", vbCritical, "Delai d'attente dépassé !"
    Exit Sub
End If
End Sub
 

Conclusion

Un grand merci a b00mrang et BadProcESs sans qui mon programme ne tournerai pas aujourd'hui.

cette partie de code fonctionne avec mon programme, il peut donc manquer la définitions de certaine variable globale....
  • signaler à un administrateur
    Commentaire de SylMat le 18/06/2003 14:11:12 administrateur CS

    Personnellement je trouve que pour une première fois c'est pas mal du tout. bonne continuation Ben.

  • signaler à un administrateur
    Commentaire de NHenry le 07/02/2006 10:36:30

    c'est quoi Comm1 (son type)?
    Je cherche à envoyer des données sur un port COM de PocketPC avec C#.NET.

  • signaler à un administrateur
    Commentaire de benbax le 10/02/2006 01:45:17

    Ha en effet, ce n'est pas précisé ici, et il y a longtemps que j'ai fait ce code...

    De mémoire "Comm" fait référence à une sorte de classe (en mémoire au C++) dans laquelle se trouve toute les méthode nécessaire à l'utilisation d'un port de communication. certains attributs de cette classe sont à initialiser au début du programme...

    Maintenant, il y a longtemps que je ne programme plus, et j'ai même perdu le vocabulaire, donc, j'espère que mon explication, si succinte soit-elle, pourra te dépanner...

  • signaler à un administrateur
    Commentaire de NHenry le 10/02/2006 08:15:45

    Merci des explications, en recherchant un (long) petit moment, j'ai fini par trouver ce qui me fallait..
    Merci de ta réponse.

Ajouter un commentaire

Pub



Appels d'offres

Snippets en rapport

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS