2012-12-04 4 views
0

J'essaie d'envoyer des données à un écran LCD qui fonctionne sur le port série. Ce code fait le travail sur VB6 mais j'avais besoin de le convertir en C#. Malheureusement, cela ne fonctionne pas. Des idées?Convertir MSComm VB6 en C#

VB6 (exemple)

MSComm1.CommPort = 1 
MSComm1.Settings = "9600,N,8,1" 
MSComm1.PortOpen = True 
MSComm1.Output = Chr(2) 
MSComm1.Output = Trim(Text1.Text) 

C# (exemple)

var serialPort1 = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); 
serialPort1.Open(); 
serialPort1.Write(((char)2).ToString()); 
serialPort1.Write(textbox1.Text); 
serialPort1.Close(); 

Je pense que le problème est sur la fonction serialPort1.Write, mais je ne pouvais pas comprendre. Pouvez-vous aider s'il vous plaît?

Répondre

0

d'abord, essayez cette méthode d'extension d'aide pour faciliter l'écriture d'un octet codes de contrôle plus facile

public static void Write(this SerialPort sp, byte b) 
{ 
    sp.Write(new byte[]{b}, 0, 1); 
} 

Ensuite, changez votre code à ceci:

var serialPort1 = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); 
serialPort1.Encodeing = System.Text.Encoding.Default; 
serialPort1.Open(); 
serialPort1.Write(2); 
serialPort1.Write(textbox1.Text.Trim()); 
serialPort1.Close(); 

S'il vous plaît noter que je n » t Vérifiez la syntaxe, mais juste à la main, alors vous pourriez avoir besoin de le modifier un peu.

0

Malheureusement, il ne fonctionne pas

Compte tenu de cette déclaration générale, je suppose qu'il ya une différence entre les types de données depuis Chr renvoie une valeur entre 0 et 255, à savoir un octet.

serialPort1.Write(new byte[]{2}, 0, 1); 
0

i faire un tableau d'octets

byte[] bytSend; 

i remplir le tableau d'octets avec les données à envoyer alors j'envoie les données avec la commande suivante

sp.Write(bytSend, 0,bytSend.GetUpperBound(0) + 1); 

du haut de ma tête , donc pas de vrai projet de test pour vous, désolé