2011-08-10 4 views
2

Hey tout ce que je suis en train de tourner un recepteur A/V sur et en dehors de cette la commande RS232 suivante:C# et Comm Ports

@MAIN:VOL=Down & Chr$(13) & Chr$(10) 

Cela fonctionne très bien dans mon application VB6:

MSCommAV.CommPort = 4 
MSCommAV.RThreshold = 1 
MSCommAV.Settings = "9600,N,8,1" 
MSCommAV.RTSEnable = True 
MSCommAV.PortOpen = True 
MSCommAV.Output = "@MAIN:VOL=Down" & Chr$(13) & Chr$(10) 

Cependant, je ne peux pas sembler le faire fonctionner dans mon C# app:

PCComm.CommunicationManager commAV = new PCComm.CommunicationManager(); 
commAV.Parity = "None"; 
commAV.StopBits = "One"; 
commAV.DataBits = "8"; 
commAV.BaudRate = "9600"; 
commAV.PortName = "COM4"; 
commAV.CurrentTransmissionType = PCComm.CommunicationManager.TransmissionType.Text; //.Hex 
commAV.OpenPort(); 
commAV.WriteData("@MAIN:VOL=Down" + "\r" + "\n"); //Vol DOWN 

Je pense que la raison pour laquelle sa ne fonctionne pas est le « \ r » et « \ n » remplaçant le VB6 Chr $ (13) & Chr $ (10).

CommunicationManager.cs: http://snipt.org/xmklh

+1

Qu'est-ce que 'PCComm.CommunicationManager'? – vcsjones

+0

Je ne sais rien sur l'utilisation de ports série en C#, mais vous n'avez pas besoin de concaténation de chaînes pour mettre un CRLF à la fin d'une chaîne. Il suffit d'écrire '" @MAIN: VOL = Down \ r \ n "'. – Wyzard

+0

@vcsjones: ajout du code CommunicationManager. – StealthRT

Répondre

5

Je ne suis pas sûr de ce que PCComm.CommunicationManager est. Cependant, il est assez simple de communiquer via Serial sans API spéciale. Ce code C# est l'équivalent du code VB6:

var port = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One); 
port.RtsEnable = true; 
port.Open(); 
port.Write("@MAIN:VOL=Down\r\n"); 
port.Close(); 

EDIT:

Il est possible que votre CommunicationManager omet parce qu'il ne fixe pas de la propriété RtsEnable à true. Votre code VB6 le fait sur la ligne 4.

+0

J'ai mis à jour mon OP avec le code CommunicationManager.cs. Aussi, comment pourrais-je écrire pour ** MSCommProj.Output = Chr (33) & Chr (137) & Chr (1) & Chr (80) & Chr (87) & Chr (48) & Chr (10) * * type de code? – StealthRT

+0

Vous pouvez insérer n'importe quel caractère dans une chaîne avec son code hexadécimal. Par exemple, 33 en hexadécimal est 21. Une séquence de caractères de 33, 13, 10 serait donc "\ u0021 \ u000d \ u000a". Si vous préférez éviter de calculer des littéraux hexadécimaux, vous pouvez également convertir des entiers: ((char) 33) .ToString() + (char) 13 + (char) 10. Si j'avais prévu d'utiliser cette approche, j'écrirais une fonction de tableau params pour gérer la concaténation. – phoog