none
使用C# rs232會有溢位且無負號的狀況 RRS feed

  • 問題

  • 各位先進大家好 我想請問一個問題

    這是上網抓取的程式 主要是用RS232從歐姆龍PLC抓取資料

    目前有個問題是抓取的資料會溢位且無負號
    像是 0x00 => 0
    0x01 => 1
    0x7F => 127
    0x80 => 0 (應該為128)
    0x81 => 1 (應該為129)
    0xFF => 127 (應該為255)

    請問是哪邊出了問題 ?

    private byte[] Port_read()
    {
    serialPort1.PortName = txtCom.Text;
    serialPort1.Open();
    /*無法轉換成正整數 */
    //---------------------------讀取部分---------------------------------//
    int B2R = serialPort1.BytesToRead;//有多少
    byte[] Buffer = new byte[B2R];//new多少byte 陣列
    if (B2R > 0)
    {
    serialPort1.Read (Buffer, 0, B2R);//有多少就讀入多少(共85byte)
    }
    
    serialPort1.Close();
    return Buffer;
    
    

    2018年7月30日 下午 12:00

解答

  • 你錯誤發生在哪行?

    1. byte[] 應該直接使用緩衝區大小來宣告,宣告時應該是 Size-1 ,因為索引從 0 開始。

    2. SerialPort 得用迴圈接收,原因參考這篇,你可能是還沒接收完整:[.Net] 資料接收的常識

    3. 其他 B2R 應該用在

    B2R = SerialPort1.Read(Buffer, 0, Size);


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 aaron5867 2018年8月4日 上午 06:36
    2018年7月30日 下午 03:08