Prob Envois port série avec VB 2008, K8056

Fredleemans Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   -  
 Hyades -
hello,

je viens d'acquérir une carte avec 8 relais Velleman (K8056) qu'il est possible de commander à partir du port série. Comme je débute dans VB 2008, je voudrais avoir votre avis sur la façon de commander le port COM1 afin d'envoyer une simple commande pour activer le relais n° 1 par ex... voici les données présentes dans la doc de la K8056.

Paramètres du port série:
2400, 8 bits, sans parité, 1 stop
On ne fait qu'émettre, il n'y a pas de réception.
Le fabriquant conseille d'émettre 2 fois la commande.

Commande:
1) CHR$ (13)
2) Adresse de la carte (1...255) à priori 1
3) Instruction (1 caractère ASCII) 'S' (voir ci dessous) soit 83 en décimal???
4) Adresse (1..255) ou n° relais ('1'..'9' ASCII) le n°1
5) checksum (complément 2 de la somme des 4 bytes précédentes+ 1)

Instructions:
...
‘S’ : Régler un relais. L'instruction 'S' doit être suivi par le numéro du relais '1' à '8'. ('9' règle tous les relais à la fois)
...

Voici mon programme tout simple, en gros je veux juste, lorsque je pousse sur un bouton, envoyer l'instruction S au relais n°1 pour voir si la communication marche. (Rq: j'ai déjà testé la carte avec un prog démo Velleman, elle fonctionne bien (point de vue RS-232)).

Imports System
Imports System.IO.Ports

Public Class Form1
Dim Port As SerialPort = New SerialPort("COM1", 2400, Parity.None, 8, StopBits.One)

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub Essai_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Essai.Click
Port.Open()
Port.Write(Chr(13) & "1" & "S" & "1" & "70") // est ce bien 70?? 13+1+S+1 en complément 2 +1...
Port.Close()
End Sub
End Class


Merci d'avance pour votre réponse, @+

fred
A voir également:

2 réponses

Fredleemans Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
 
salut

y a t il qqun qui pourrait me donner qq conseil pour la communication série en VB 2008?

merci pour votre réponse...

fred
0
loupius
 
J'ai l'impression que tu as trouvé une question précédente:
http://www.commentcamarche.net/forum/affich 10145930 comment programmer le kit velleman k8056
L'adresse de la carte va de 1 à 255 (codé sur 1 caractère) donc il ne faut pas envoyé la caractère 1 mais le code hexa 0x01; de même pour le checksum, il s'agit de la somme en binaire.
Désolé, mais il y a beaucoup trop longtemps que j'ai touché au visual basic pour te répondre. Pour vérifier que la commande est bien envoyée, il y a toujours l'oscillo.
0
Fredleemans Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
 
salut loupius,

merci de me répondre. En fait j'avais bien vu le précédent post ou vous parliez de cette carte, ça m'a déjà pas mal aidé pour comprendre ce qu'il fallait envoyer à la 8056 mais le truc c'est que comme je n'arrive à avoir que VB2008 j'ai un peu de mal à trouver des exemples pour configurer un simple envois de donnée par port série. J'ai trouvé un exemple en VB6 comme tout le monde sur le site de Velleman mais pas utilisable en VB2008 et je peine à trouver le VB6 sur le net... si t as des infos, je suis preneur

Y a peut etre moyen de créer aussi facilement un mini prog dans un autre langage...? (je connais un peu le C++)

voilà

@ +
0
tux > Fredleemans Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
 
Salut Fred je viens de jouer un peu avec la carte voici une routine qui fonctionne avec Visual studio 2008 mais en C#. A mon avis c'est au niveau du checksum que ton code n'est pas bon

SerialPort port = new SerialPort(
"COM4", 2400, Parity.None, 8, StopBits.One);

// Open the port for communications
port.Open();


// Write a set of bytes
//port.Write(new byte[] {13, 1, 83, 49, 110}, 0, 5);
port.Write(new byte[] { 13, 1, 67, 49, 126 }, 0, 5);
// Close the port
port.Close();

j'espère que cela pourra t'ai
0
Hyades > Fredleemans Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour

J'ai une gestion partielle des port série :

Public Shared recep_port As String
Public Shared emis_port As String
Public Shared port = New System.IO.Ports.SerialPort()
' Configuration du port série : SCS1 sur Port : COM1
Public Serial = New System.IO.Ports.SerialPort()

' Activation de la fenêtre
Private Sub Accueil_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
Serial.PortName = "COM1"
Serial.BaudRate = 9600
Serial.DataBits = 8
Serial.StopBits = 1
Serial.Parity = 2 'Even
Serial.Handshake = IO.Ports.Handshake.None
Serial.ReadTimeout = 50
Serial.WriteTimeout = 50
End Sub

'------------------------------------'
' Gestion des ports série de la page '
'------------------------------------'
' Emission - reception
Public Shared Sub transmission()
Dim Thread_in As System.Threading.Thread = New System.Threading.Thread(AddressOf reception)
Thread_in.Start()
port.write(emis_port)
Thread_in.Join()
End Sub

' Port in
Public Shared Sub reception()
recep_port = ""
Try
Do
recep_port &= Chr(port.ReadByte)
Loop
Catch ex As Exception
End Try
End Sub

Partielle car ce code ne gère pas les arrivées en dehors d'une écriture.
0