1. 程式人生 > >威綸通觸控式螢幕的自由口通訊

威綸通觸控式螢幕的自由口通訊

一、選擇自由口通訊協議並設定相關引數

二、選擇工具下的巨集指令

傳送:

macro_command main()
      char byCommand[3] = {0x01,0x42,0x0D}

     bool HMI_W

     OUTPORT(byCommand[0], "Free Protocol", 3)//  send 32 bytes

     SETBITON(0x00, HMI_W, 0)

     SetData(HMI_W, "Local HMI", LB, 100, 1)

     ASYNC_TRIG_MACRO(1)      //呼叫代號為1的巨集,即:接收巨集

end macro_command

 

接收:

macro_command main()

 short wResponse[5],TEMP[3], receive_len

 float T

 char K[6]

 INPORT(wResponse[0], "Free Protocol", 5, receive_len)//  read 5 words

  if receive_len >= 5  then

    //SWAPB(wResponse[1], TEMP[1])

    //SWAPB(wResponse[2], TEMP[2])

        LOBYTE(wResponse[1], K[0])

    HIBYTE(wResponse[1], K[1])

    LOBYTE(wResponse[2], K[3])

    HIBYTE(wResponse[2], K[4])

    LOBYTE(wResponse[3], K[5])

    K[2] = '.'

    ASCII2FLOAT(K[0], T, 6)

  end if

  SetData(T, "Local HMI", Lw, 100, 1)

  ASYNC_TRIG_MACRO(0)

end macro_command

三、總結:

由於HMI接收到的資料高低字倒置,從而需要首先對高低位元組進行處理。起初使用SWAPB指令將採集到的資料轉存至TEMP[9]陣列中,然後再提取TEMP[9]中的資料,但是此方法產生的計算量較多,從而採取現在的方式進行處理。

同時還有另外一個問題,最初使用的是將陣列中用到的資料首先通過ASII2DEC指令轉換成DEC資料,然後再除以1000轉換為浮點數,最終通過SETDATA指令傳送至HMI內部暫存器,但是在HMI顯示中資料非正常。後來在陣列中增加小數點’.’字元,直接通過ASII2FLOAT指令轉換為浮點數,然後轉存至HMI內部暫存器中,最終得以解決。

四、巨集指令表