none
關於寫入命令與讀取封包格式的問題。 RRS feed

  • 問題

  • 近來正在研究日本Hokuyo的雷射測距儀(URG-04LX),我也寫了個程式來測試他的命令與封包回傳的問題。

    送出命令與封包格式上並沒有任何問題,但是在讀取上,Button按鈕按下去以後,視窗就會呈現當機狀態。

    //===========================================

    serialPort1.Write(new byte[] { 0x56 , 0x0a }, 0, 2);
    richTextBox1.Text = "";
    richTextBox1.Text += "成功的送出了訊息!!" + "\n";

    richTextBox1.Text += serialPort1.ReadByte();

    //===========================================

    如果利用 serialPort1.ReadExisting(); 來做讀取的話 卻又無法回傳任何值。

    目前猜想應該是讀取的方面有問題,但是卻不了解原因為何?

    先介紹一下通訊方式,以下用原文方式呈現。小弟自己有翻譯成中文,但是避免誤導前輩們方向,因此還是放上原文。

    Communication Format

    (HOSTàSENSOR)

    Command

    Parameter

    LF(0aH) or CR(0dH)

    (SENSOR à HOST)

    Command

    Parameter

    LF

    Status

    LF

    Data

    LF

    LF

    l   Communication is initiated from the host side.

    l   There are no initiation codes. Termination code is either Line Feed(0aH)or Carriage Return(0dH).

    l   Command and the parameters will echo back with the status and data attached to it.

    l   The block check code does not have any type.

    l   Status other than ‘0’(30H) is the error code.

    l   The LF separates data after every 64 bytes if the data size exceeds 64 bytes.

    l   Two LF appear continuously at the end of the received data.

    //==========================================================

    程式碼的命令部分,我是運用他的V命令,主要是擷取他的儀器版本訊息。

    Command Types

    V-Command(Version Information)

    (HOSTàSENSOR)

    ‘V’(56H)

    LF(0aH) or CR(0dH)

    (SENSOR à HOST)

    ‘V’(56H)

    LF

     

    Status

    LF

     

    Vender Information

    LF

     

    Product Information

    LF

     

    Firmware Version

    LF

     

    Protocol Version

    LF

     

    Sensor Serial Number

    LF

    LF

     

    Example

    V[LF]

    0[LF]

    VEND:Hokuyo AUTOMATIC Co.,LTD.[LF]

    PROD:2D Emulator,(10Hz,1.80deg/step,0-270deg,20-4000mm)[LF]

    FIRM:00003,(PBS 1.1.2Rb2),(2004/05/13)[LF]

    PROT:00001,(SCIP 1.0)[LF]

    SERI:0000000001[LF][LF]

    //=============================================



     

    2009年6月10日 上午 10:53

解答

所有回覆

  • Heracles:
        你可以嘗試使用[SerialPort.DataReceived 事件]搭配[SerialPort.Read 方法 ] 來處理.
        以下這篇文章有 VB2005的相關範例,你也可以參考一下 http://www.dotblogs.com.tw/billchung/archive/2009/04/12/7981.aspx


    會寫程式不代表會通靈
    • 已標示為解答 Heracles_Lo 2009年6月11日 下午 06:28
    2009年6月10日 上午 11:06
    版主
  • 謝謝 BillChung前輩的指導,今天照著這樣做以後,總算發現問題在那裏了。

    原因在於....

    HOKUYO(北陽)給的說明書,他的線接腳...TxD與RxD的接腳跟電腦的RS232傳輸接腳不同...

    難怪怎麼讀都讀不到東西...囧rz

    這是HOKUYO給的表

    Pin NO.

    Signals

    Colors

    1

    N.C.

    Red

    2

    N.C.

    White

    3

    OUTPUT(Synchronous output)

    Black

    4

    GND(5th pin of 9-pin, D-sub connector)

    Purple

    5

    RxD(3th pin of 9-pin, D-sub connector)

    Yellow

    6

    TxD(2th pin of 9-pin, D-sub connector)

    Green

    7

    0V

    Blue

    8

    DC 5V

    Brown


    對RS232不熟悉的我,如果沒有人指導,可能還不知道該怎麼做了...

    2009年6月11日 下午 06:28