威綸通觸控式螢幕的自由口通訊
一、選擇自由口通訊協議並設定相關引數
二、選擇工具下的巨集指令
傳送:
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內部暫存器中,最終得以解決。
四、巨集指令表