2011-08-25 92 views
1

我想讓我的C#應用​​程序通過在.net中使用SerialPort類通過rs232與數字刻度進行通信。不幸的是,我無法獲得任何反饋。如何通過rs232與刻度進行通信

這是一個TSCALE TSQSP規模和aparently它使用CAS通信協議。根據我對CAS協議的理解,我需要發送「ENQ」等待「ACK」,然後發送「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。現在一切正常,thx。

+0

你有沒有通過膩子的COM端口連接和測試它,以確保其處理輸入/輸出你怎麼指望什麼呢?如果沒有,我會這麼做 - 至少這樣你可以確保你知道設備的工作方式,然後寫你的代碼。 – Prisoner

回答

4

我已經設定了很多的權重,通常如果你不連得上的ENQ響應,那是因爲你已經設定了一個串口uncorrectly。 100%確定波特率,數據位,停止位和奇偶校驗設置正確。

我會做的就是下載LookRS232。它是一個通過COM端口進行通信的程序。安裝完成後,使用我們的設置打開COM端口,然後直接將ENQ寫入COM端口。測試大量設置讓它首先在這裏工作會更容易。然後,當你開始工作時,使用你程序中完全相同的設置。

EDIT - 增加了一些百分點HANS順便這裏說的VITAL - 最重要的是ENQ是ASCII值5,而不是字符串

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」,沒有任何反應。漢斯提到,也許我應該用「5」代替「ENQ」,這是正確的方向嗎? – Angrest

+1

漢斯就在那裏。你應該發送5,而不是字符串「ENQ」 –

+2

我的答案有可能獲得有用的投票或發展成答案的機率很小。你有最高的投票答案,請隨意使用我發佈的內容。讓我知道,我會upvote它。 –

2

的另一個問題是,你有正確的電纜?接線盒非常適合驗證接線。

2

如果需要發下來ENQ,你需要發送一個二進制5,而不是字符串5.

如果你正在寫

port.Write("5"); 

這樣,你就向下發送二進制53(ASCII Chart ) 在ASCII圖表上查看12月5日是詢問和Dec 53是字符'5'?

試試這個:

byte [] Buff = new byte[1]; 
     Buff[0] = 0x05; 
     port.Write(Buff, 0, 1); 
相關問題