2011-08-10 8 views
2

이봐 난 다음 RS232 명령에이 해제하는 A/V 리시버를 설정하려고 모든 :C# 및 통신 포트

이 내 VB6 응용 프로그램에서 잘 작동
@MAIN:VOL=Down & Chr$(13) & Chr$(10) 

:

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) 
내가없는 것 그러나

는 내 C# 응용 프로그램에서 작업을 얻을 수 있습니다 :

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 

나는 그것이 "\ r에"와 "\ n을"는 VB6의 대하를 대체 작동하지 않는 이유를 생각한다 $ (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없이 Serial을 통해 통신하는 것은 상당히 간단합니다.

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(); 

편집 :이 C# 코드는 VB6 코드에 해당합니다

그것이 trueRtsEnable 속성을 설정하지 않기 때문에 당신의 CommunicationManager가 실패 가능성이 있습니다. 귀하의 VB6 코드는 4 행에 있습니다.

+0

OP를 CommunicationManager.cs 코드로 업데이트했습니다. 또한, 어떻게해야합니까 ** 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 진수 리터럴을 계산하지 않으려면 정수를 캐스팅 할 수도 있습니다. ((char) 33) .ToString() + (char) 13 + (char) 10. 이 방법을 사용하려고한다면, 연결을 처리하는 params 배열 함수를 작성해야합니다. – phoog