2011-08-25 4 views
1

J'essaie de faire communiquer mon application C# avec la balance numérique via rs232 en utilisant la classe SerialPort dans .net. Malheureusement, je ne peux obtenir aucun retour de l'échelle.Comment communiquer avec la balance via rs232

Il s'agit d'une échelle TSCALE TSQSP et elle utilise le protocole de communication CAS. De ma compréhension dans le protocole CAS je dois envoyer "ENQ" attendre "ACK" et ensuite envoyer "DC1" pour obtenir des informations, mais après avoir envoyé "ENQ" je ne reçois aucune réponse. Voici mon code. Est-ce que quelqu'un a de l'expérience avec l'échelle avec le même protocole de communication?

Merci beaucoup pour toute aide

public partial class Form1 : Form 
{ 
    private SerialPort port = new SerialPort("COM6", 4800, Parity.None, 8, StopBits.One); 

    public Form1() 
    { 
     InitializeComponent(); 

     port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); 
     port.Open();    
    } 

    private void button1_Click(object sender, EventArgs e) 
    {    
     port.Write("ENQ"); 

    } 

    private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) 
    { 
     this.textBox1.Text = port.ReadExisting(); 
    }  
} 

Merci tout le monde pour l'aide, toutes les réponses ont été utiles, j'ai enfin pu le faire fonctionner. D'abord, j'ai découvert que je n'avais pas l'échelle mis en place correctement et aussi vous avez raison que je suis supposé envoyer 05H. Tout fonctionne maintenant, merci.

+0

Avez-vous connecté via mastic au port COM et testé pour vous assurer que la manipulation de l'entrée/sortie que vous attendez? Sinon, je le ferais - au moins de cette façon, vous pouvez vous assurer que vous savez comment fonctionne l'appareil, puis écrivez le code autour de cela. – Prisoner

Répondre

4

J'ai programmé beaucoup de poids, et habituellement si vous n'obtenez même pas de réponse sur l'ENQ c'est parce que vous avez mal configuré le SerialPort. Soyez sûr à 100% que la vitesse de transmission, les bits de données, les bits d'arrêt et la parité sont correctement définis.

Ce que je ferais est de télécharger LookRS232. C'est un programme pour communiquer via le port COM. Après son installation, ouvrez le port COM avec nos paramètres, puis écrivez ENQ directement sur le port COM. Il est plus facile de tester un grand nombre de paramètres pour que cela fonctionne d'abord ici. Ensuite, lorsque vous le faites fonctionner, utilisez exactement les mêmes paramètres dans votre programme.

EDIT - AJOUTÉE QUELQUES POINTS DE PASSANT HANS ICI CE QUI EST VITAL - LE PLUS IMPORTANT EST QUE ENQ est VALEUR ASCII 5, ET NON UNE CHAÎNE

port.Write("ENQ"); 

ENQ, ACK et DC1 sont des codes de contrôle, non cordes. Utilisez une table ASCII pour connaître le code. Correction:

port.Write(5); 

Vous devez également activer les signaux de prise de contact de matériel, de nombreux appareils utilisent pour faire en sorte que la machine est sous tension et prêt à recevoir des données. Donc, ils savent que tout ce qu'ils reçoivent est de vraies données et pas de bruit. Correction:

port.Open();    
port.DtrEnable = true; 
port.RtsEnable = true; 

Test de la connexion avec un autre programme comme HyperTerminal ou Putty est toujours une bonne idée si vous avez encore des problèmes. Générez les codes de contrôle avec la touche Ctrl de votre clavier. ENQ est Ctrl + E, DC1 est Ctrl + Q.

+0

J'ai essayé le lookRS232, vous avez raison, c'est assez pratique. J'ai essayé "ENQ \ n", rien ne se passe. Hans a mentionné peut-être que je devrais utiliser "5" au lieu de "ENQ", est-ce la bonne direction? – Angrest

+1

Hans est sur place là-bas. Vous devriez envoyer 5, et pas la chaîne "ENQ" –

+2

Les chances que ma réponse obtiendra un vote utile ou se transformer en une réponse sont minces à aucun. Vous avez la réponse la plus élevée, n'hésitez pas à utiliser ce que j'ai posté. Faites le moi savoir et je vais l'augmenter. –

2

L'autre problème est: avez-vous le bon câble? Une boîte de dérivation fonctionne très bien pour vérifier le câblage.

2

Si vous devez envoyer vers le bas ENQ, vous devez envoyer un fichier binaire 5, pas une chaîne 5.

Si vous écrivez

port.Write("5"); 

Ensuite, vous envoyez vers le bas un binaire 53 (ASCII Chart Voir sur le tableau ASCII comment Dec 5 est l'enquête et Dec 53 est le char '5'?

Essayez ceci:

byte [] Buff = new byte[1]; 
     Buff[0] = 0x05; 
     port.Write(Buff, 0, 1); 
Questions connexes