none
SerialPort 使用 comport.Read(buffer, offset,count ); 讀出一串資料後會存在哪裡? RRS feed

  • 問題

  • 各位前輩好

    我使用 comport.Read(buffer, 0, bytes); 接收到7byte長度的資料 例如: 01 04 02 FF FF B8 80 , 我想要取第4、5 byte的資料(也就是FF FF的部分)做乘除的運算,但我不知道如何讀到這兩筆資料,

    我的作法是在comport.Read(buffer, 0, bytes);之後下

    SensorData1 = buffer[4];

    SensorData2 = buffer[5];

     但是好像不能直接這樣讀值?  請問這該怎麼做,還是有其他的寫法? 謝謝!!

    另外 comport.Read(buffer, offset,count ); 其中offset 在什麼地方有用? 當作進未使用嗎?

    下面這段是我可以接收資料、並且顯示數值的程式碼

    private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)

                                       

        {

            // Obtain the number of bytes waiting in the port's buffer
            int bytes = comport.BytesToRead;

            // Create a byte array buffer to hold the incoming data
            byte[] buffer = new byte[bytes];        

            // Read the data from the port and store it in our buffer
             comport.Read(buffer, 0, bytes);

            // Show the user the incoming data in hex format
             Log(LogMsgType.Incoming, ByteArrayToHexString(buffer));
          }
        }


    2017年11月22日 上午 11:44

所有回覆

  • 資料就放在你傳進去的那個 buttfer 變數所指向的 Byte陣列

    index 從 0 開始, 所以中文所謂的第四,是 [3]

    寫 serialport 的話,以下系列文可以一觀

    海角點部落 serialport 系列

    補充一下, 忘了講 offset,offest 代表你要從 buffer 那個陣列的哪個 index 開始放讀回的資料,一般情形我們都用 0,表示從 buffer[0] 開始放資料。 


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


    2017年11月22日 下午 01:58
    版主
  • 不要自作多情去讀 bytes

    在你執行到 .Read 之前,資料仍有可能餵進來,你的 bytes 應該用在這:

    bytes = comport.read(buffer, 0, buffersize)

    資料轉換前你應該先確認 modbus address mapping 裡面記載的型別,做正確轉換,例如使用 BitConverter 或是 其他位元陣列轉換方式

    [.Net] 資料接收的常識


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

    2017年11月22日 下午 03:53