none
SerialPort RS232接收資料問題? RRS feed

  • 問題

  • 大家好,目前手邊有拿到一台磅秤機來測試,但是回傳的資料和在AccessPort 的程式顯示的資訊 差異很大,

    磅秤秤重完 在按"列印" 才會回傳到電腦端這邊。

    附上我目前接收的程式碼。

    在bufferData裡面的資訊我覺得就不對了,所以解析出來都有問題

    找了很多資訊但是自己還想不出來問題點在哪邊,請大家指點一下我錯誤的部分,謝謝

    // PORT 接收事件
            void SerialPort_DataReceived2(object sender, SerialDataReceivedEventArgs e)
            {
                try
                {
                    //System.Threading.Thread.Sleep(5); 
                    string temp = "";
                    string temp2 = "";
                    byte[] bufferData = new byte[serialPort.BytesToRead];
                    serialPort.Read(bufferData, 0, bufferData.Length);
                    for (int i = 0; i < bufferData.Length; i++)
                    {
                        temp2 += String.Format("{0:X}", bufferData[i]);
                        temp += bufferData[i];
                    }
                    MessageBox.Show("資料:" +temp);
                    MessageBox.Show("資料(16):" + temp2);
                    temp = System.Text.Encoding.ASCII.GetString(bufferData);
                    SetText(temp);
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    
            }

    自己寫的程式資訊

    資料:    636363638363631701501381979012912949151773916623563635310
    資料(16):3F3F3F3F533F3FAA968AC55A818131974D27A6EB3F3F35A
    資料(字串) ps.都是亂碼

    AccessPort 讀取的資訊
    資料:   53 54 2C 4E 54 2C 2B 20 20 31 2E 35 39 30 6B 67 0D 0A 00
    資料(字串):ST,NT,+  1.590kg


    • 已編輯 Randice_d 2017年4月7日 上午 08:52 修飾
    2017年4月7日 上午 07:33

解答

  • 所有的 SerialPort 的相關配置參數設定正確嗎 ?

    我還沒見過用 Serialport 讀進來的資料會和 accessport 不一樣的情況。

    不過, 建議你不要用 DataReceived Event,你可以參考以下文章,用執行緒讀取

    Serial Port 系列(11) 基本篇 -- 利用執行緒讀取資料


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2017年4月7日 上午 09:43
    版主

所有回覆

  • 所有的 SerialPort 的相關配置參數設定正確嗎 ?

    我還沒見過用 Serialport 讀進來的資料會和 accessport 不一樣的情況。

    不過, 建議你不要用 DataReceived Event,你可以參考以下文章,用執行緒讀取

    Serial Port 系列(11) 基本篇 -- 利用執行緒讀取資料


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2017年4月7日 上午 09:43
    版主
  • 原因有找到了,真的是參數設定有問題....

    眼殘了,抱歉

    原本的

                     // 初始化 PORT
                    this.serialPort.BaudRate = 9600;            // baud rate = 9600
                    this.serialPort.Parity = Parity.Even;       // Parity = none
                    this.serialPort.StopBits = StopBits.One;    // stop bits = one
                    this.serialPort.DataBits = 8;               // data bits = 8

    修改後

                     // 初始化 PORT
                    this.serialPort.BaudRate = 9600;            // baud rate = 9600
                    this.serialPort.Parity = Parity.None;       // Parity = none
                    this.serialPort.StopBits = StopBits.One;    // stop bits = one
                    this.serialPort.DataBits = 8;               // data bits = 8

    2017年4月7日 上午 09:51