2011-08-25 14 views
1

.NET에서 SerialPort 클래스를 사용하여 rs232를 통해 C# 애플리케이션과 디지털 저울을 통신하려고합니다. Unfortunatelly 나는 규모에서 어떤 의견을 얻을 수 없습니다.rs232를 통해 저울과 통신하는 방법

TSCALE TSQSP 저울이며 CAS 통신 프로토콜을 사용하고 있습니다. 내 이해에서 CAS 프로토콜에서 "ACK"에 대한 "ENQ"대기를 보내고 "DC1"을 보내 정보를 얻지 만 "ENQ"를 보낸 후에 응답이 없습니다. 여기 내 코드가있다. 누구나 동일한 통신 프로토콜을 사용하여 규모에 대한 경험이 있습니까?

덕분에 도움을 도움

public partial class Form1 : Form 
{ 
    private SerialPort port = new SerialPort("COM6", 4800, Parity.None, 8, StopBits.One); 

    public Form1() 
    { 
     InitializeComponent(); 

     port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); 
     port.Open();    
    } 

    private void button1_Click(object sender, EventArgs e) 
    {    
     port.Write("ENQ"); 

    } 

    private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) 
    { 
     this.textBox1.Text = port.ReadExisting(); 
    }  
} 

감사합니다 모두에게 많은, 모든 대답은 도움이되었다, 나는 마지막으로 작동 할 수 있었다. 첫번째로 나는 저울을 올바르게 만들지 않았고 당신도 내가 05H를 보내야한다고 맞 혔다는 것을 알았다. 이제 모든 것이 작동합니다.

+0

는 당신이 COM 포트에 퍼티를 통해 연결하고 테스트 :

이 시도? 그렇지 않다면, 나는 그렇게 할 것입니다. 최소한 디바이스가 어떻게 작동 하는지를 알 수 있도록 코드를 작성하십시오. – Prisoner

답변

4

많은 가중치를 프로그래밍했는데 보통 ENQ에서 응답을 얻지 못하는 경우 SerialPort를 잘못 설정했기 때문에 ENQ에서 응답을받지 못하는 경우가 많습니다. 전송 속도, 데이터 비트, 정지 비트 및 패리티가 올바르게 설정되었는지 100 % 확인하십시오.

내가하려는 것은 LookRS232을 다운로드하는 것입니다. COM 포트를 통해 통신하는 프로그램입니다. 설치가 끝나면 설정으로 COM 포트를 연 다음 ENQ를 COM 포트에 직접 작성하십시오. 먼저 많은 설정을 테스트하여 여기에서 먼저 작동하도록하는 것이 더 쉽습니다. 그런 다음 작동 시키면 프로그램에서 똑같은 설정을 사용하십시오.

EDIT - VITAL 여기 한스 김에에서 추가 SOME POINTS - 대부분의 중요 ENQ 아스키 VALUE 5 AND NOT A STRING 있다는

port.Write("ENQ"); 

ENQ, ACK 및 DC1 제어 코드없는 문자열. ASCII 표를 사용하여 코드를 확인하십시오. 수정 :

port.Write(5); 

또한 하드웨어 핸드 셰이크 신호를 설정해야합니다, 많은 장치는 컴퓨터가 켜져 있고 데이터를받을 준비가되어 있는지 확인하는 데 사용합니다. 따라서 그들은 그들이받는 것이 무엇이든 실제 데이터이며 잡음이 아니라는 것을 안다. 수정 :

port.Open();    
port.DtrEnable = true; 
port.RtsEnable = true; 

하이퍼 터미널 또는 퍼티와 같은 다른 프로그램으로 연결을 테스트하는 것은 여전히 ​​문제가있는 경우 항상 좋은 생각입니다. 키보드의 Ctrl 키를 사용하여 제어 코드를 생성하십시오. ENQ는 Ctrl + E이고, DC1은 Ctrl + Q입니다.

+0

나는 lookRS232를 시도했다, 당신은 그 것이 아주 편리하다. "ENQ \ n"시도했지만 아무 일도 일어나지 않습니다. 한스 언급했는데 "ENQ"대신 "5"를 사용해야합니다. 올바른 방향입니까? – Angrest

+1

한스가 그 자리에 있습니다. "ENQ"문자열이 아닌 5를 보내야합니다. –

+2

내 대답이 도움이되는 표를 얻거나 대답으로 발전 할 확률은 아무에게도 미치지 않습니다. 가장 높은 투표 결과를 얻었으니 언제든지 게시 한 것을 사용하십시오. 나에게 알리면 나는 그것을 upvote거야. –

2

다른 문제는 올바른 케이블입니까? 브레이크 아웃 상자는 배선을 확인하는 데 효과적입니다. 당신이 ENQ를 전송해야 할 경우 다음 당신이 아래로 보내는

port.Write("5"); 

를 작성하는 경우

2

, 당신은 바이너리 5,하지 문자열 5.

를 보낼 필요가 이진 (53) (ASCII Chart) ASCII 차트에서 Dec 5가 Inquiry이고 Dec 53이 char '5'인 것을 확인하십시오.자신이 예상하는 방법 입력/출력을 처리 확인을

byte [] Buff = new byte[1]; 
     Buff[0] = 0x05; 
     port.Write(Buff, 0, 1); 
관련 문제