Comment puis-je envoyer des octets à un périphérique série en C#?

J'ai un appareil qui utilise de série (via un adaptateur USB) à l'interface avec mon PC. Je vais avoir de réelle difficulté à la faire jouer gentiment en C#. Je sais qu'il fonctionne correctement parce que le fournisseur du logiciel se comporte comme prévu. Je sais aussi que je suis capable de recevoir des données à l'aide de mon code grâce à un mode de test qui envoie à plusieurs reprises "OK".

Voici mon code:

    private SerialPort port;

    public SerialConnection()
    {
        this.port = new SerialPort("COM3", 38400, Parity.None, 8, StopBits.One);
        this.port.WriteTimeout = 2000; port.ReadTimeout = 2000;

        this.port.Open();

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

    public void SendCommand(byte[] command)
    {
        this.port.Write(command,0,command.Length);
        string chars = "";
        foreach (byte charbyte in command) chars += (char)charbyte;
        Console.WriteLine(" -> " + chars);
    }

    void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        string data = this.port.ReadLine();
        Console.WriteLine(" <- " + data);
    }

Pour le moment je suis en utilisant un autre mode de test qui est censé faire écho à tout ce qu'il reçoit. En conséquence, je suis d'appeler SendCommand avec les octets suivants:

byte[] {
    0x50,
    0x69,
    0x6E,
    0x67
}

Mais rien ne semble l'avoir envoyé.

Je n'ai aucune idée de ce à essayer ensuite. Quelqu'un a des suggestions?


Pour une question subsidiaire, j'ai posté quelques PortMon journaux. Je pense qu'ils pourraient être utiles ici aussi, donc, ici, ils sont:

  1. Les fournisseurs de logiciel - avec tous les IOCTL_SERIAL_GET_COMMSTATUS entrées filtrées
  2. Mon orteil-dip tentative
Je pourrais vous recommandons de le télécharger Free Serial Port Monitor (serial-port-monitor.com). (Ignorer les 12 millions de partie, il y a un lien de téléchargement sur la gauche.) Il surveille les appels vers le numéro de série de disques en quelque sorte et a été très utile pour moi dans le débogage série de questions de ce genre. Vous trouverez peut-être que l'appareil est en fait l'envoi de données de retour, et votre tampon recevoir seuil est mise à haut ou quelque chose.
Merci Brad. J'ai essayé et trouvé qu'il n'est pas envoyer quoi que ce soit de retour. Il est d'une grande utilité.
Vous devriez lire plus sur le protocole à la main. Je soupçonne que vous manque quelque chose. Si il est utile pour vous, utilisez utilitaire de même avec le logiciel de l'appareil est venu avec, et de comparer vos données. Si vous envoyez exactement les mêmes commandes, puis vérifier l'état des lignes et assurez-vous qu'ils sont les mêmes aussi.
Je ne sais pas pourquoi je n'ai pas essayer d'espionnage sur la condition d'application avant, mais quand je le fais, il semble être en utilisant les mêmes séquences d'octets que j'utilise. J'ai essayé de l'inspection de la configuration des broches, mais à l'aide de la table vue de l'serial port monitor est apparemment un moyen infaillible de se planter mon PC.
assurez-vous de débrancher le logiciel de surveillance avant de fermer les programmes qui accèdent au port série, ou de débrancher l'adaptateur série. Il y a un logiciel similaire disponible... peut-être Franson vous donnera gratuitement un essai: franson.com/serialtools En tout cas, je soupçonne que votre statut de lignes doivent être définis.

OriginalL'auteur Tom Wright | 2011-03-31