2011-08-10 6 views
2

ちょっと私には、以下のRS232コマンドでこのオフのA/Vのレシーバをオンにしようとしていますすべて:C#とCommのポート

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

これは私の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) 

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 

私はそのが働いていない理由は、VB6のChr関数を置き換える「\ rを」と「\ nを」だと思う:私はそれは私のC#アプリケーションでの作業を取得するように見えることはできませんが

$(13)& Chr $(10)。

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

+1

'PCComm.CommunicationManager'とは何ですか? – vcsjones

+0

私はC#でシリアルポートを使うことについて何も知らないが、文字列の最後にCRLFを置くために文字列の連結を必要としない。 @MAIN:VOL = Down \ r \ n "'と書くだけです。 – Wyzard

+0

@vcsjones:CommunicationManagerコードが追加されました。 – StealthRT

答えて

5

私はPCComm.CommunicationManagerが何であるかわかりません。しかし、特別なAPIなしでシリアル経由で通信するのはかなり簡単です。このC#コード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

それはtrueRtsEnableプロパティを設定されていないので、それはあなたのCommunicationManagerが失敗している可能性があります。あなたのVB6コードはそれを4行目で行っています。

+0

私はCommunicationManager.csコードでOPを更新しました。また、どのように私は**の書き込みを行うだろう** MSCommProj.Output = Chr(33)&Chr(137)&Chr(1)&Chr(80)&Chr(87)&Chr(48)&Chr(10)* *コードの種類? – StealthRT

+0

任意の文字を16進コードで文字列に挿入できます。たとえば、16進数の33は21です。したがって、33,13,10の文字シーケンスは "\ u0021 \ u000d \ u000a"になります。 16進リテラルの計算を避けたい場合は、int(:(char)33).ToString()+(char)13 +(char)10をキャストすることもできます。私がこのアプローチを使用しようとしていたら、連結を処理するparams配列関数を記述します。 – phoog