je fait une demande en C# qui envoie 11 octets de données à un port série en utilisant:problème avec SerialPort dans une application C#
port = new SerialPort("COM1");
port.BaudRate = 9600;
port.DataBits = 8;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.ReadTimeout = 1000;
port.WriteTimeout = 1000;
port.Open();
byte[] buffer = new byte[11];
buffer[0] = 0;
buffer[1] = 0;
buffer[2] = 0;
buffer[3] = 3;
buffer[4] = 2;
buffer[5] = 4;
buffer[6] = 1;
buffer[7] = 20;
buffer[8] = 50;
buffer[9] = 0;
buffer[10] = 120;
port.Write(buffer, 0, 11);
Puis j'ai écrit une autre application pour tester le précédent. Je voudrais vérifier si les 11 octets ont été correctement envoyés. Dans cette application, j'utilise:
using (SerialPort port = new SerialPort("COM1"))
{
// configure serial port
port.BaudRate = 9600;
port.DataBits = 8;
port.Parity = Parity.None;
port.StopBits = StopBits.One;
port.Open();
for (; ;)
{
byte[] b = new byte[11];
port.Read(b, 0, 11);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 11; ++i)
{
sb.Append(b[i]);
sb.Append(" ");
}
Console.WriteLine(sb.ToString());
}
}
pour recevoir des octets. Le problème est que, après avoir envoyé quelque chose comme ceci:
0 0 0 3 2 4 1 20 50 0 120
Je reçois:
0 0 0 0 0 0 0 0 0 0 0
0 0 3 2 1 4 20 50 0 120 0
Pourquoi se fait-il? Quel genre d'erreur y a-t-il dans mon code? Merci
Si vous observez le port série avec HyperTerminal, voit-il les 11 octets corrects? – mtrw
@mtrw J'ai envoyé des données binaires et Hyper Terminal les montre avec des caractères étranges. Y a-t-il un moyen de les convertir dans un format numérique? –
désolé j'ai raté votre question. Je ne connais pas de moyen de faire en sorte que HyperTerminal gère les données binaires, mais des outils comme PortMon (http://technet.microsoft.com/en-us/sysinternals/bb896644.aspx) sont utiles pour cette situation. Quoi qu'il en soit, je suis content que votre problème semble être résolu. – mtrw