官术网_书友最值得收藏!

2.4 十六進制轉浮點型

2.4.1 手動轉換過程

MCGSE中沒有浮點型數據與十六進制之間轉換的函數,需要由用戶自己編程實現。如圖2-11所示,“-42.456985474”這個浮點數在計算機中的存儲格式為“C229D3F4”,由二進制形式轉換為浮點數的步驟如下:

圖2-11 十六進制轉換為浮點型數據的過程示意圖

(1)確定符號 浮點數對應二進制數據的首位表示正、負,“1”為負,“0”為正,此處為“1”,故浮點數的符號為“-”,即最終計算會得到一個負數。

(2)通過指數將尾數分為整數部分與小數部分 浮點數用二進制表示可分為整數部分與小數部分,都包含在尾數部分。整數部分用2的整數次冪表示,這個整數次冪即是指數部分的值減去127,此處為5,從尾數開始向右數5位,即二進制整數部分與小數部分的分界線,也就是圖中小數點的位置,小數點左邊為整數,右邊為小數。

(3)計算整數部分 浮點數中,尾數的表示形式為1.xxx…,存儲時省去了小數點前的1。因此,還原整數時,應將1添加進去,整數部分在“01010”的5個二進制位前面再加1,結果為“101010”,即整數部分的值為42。

(4)計算小數部分 指數在尾數中確定整數與小數部分的分界線后,從尾數的開始處向右移5個指數位,得到小數的起始位置,然后按二進制的運算方法計算小數的值,即對各個位進行累加1×(1/22)+1×(1/23)+1×(1/24)+1×(1/26)+1×(1/29)+1×(1/210)+1×(1/211)+1×(1/212)+1×(1/213)+1×(1/214)+1×(1/216),最終值為0.456985474。

(5)合成為浮點型數值 整數部分加上小數部分得到整個浮點數的絕對值,再乘以符號位,得到完整浮點數的值,即(-1)×(42+0.456985474)=-42.456985474。可參考二維碼視頻講解。

2.4.2 MCGSE轉換過程

了解了十進制浮點型數據與浮點型數據在計算機中的二進制存儲形式之間的變換關系后,可以在MCGSE中實現這個轉換過程,具體步驟如下:

(1)布置窗口 啟動MCGSE程序后,出現如圖2-12所示界面,點擊“新建窗口”按鈕,出現“窗口0”,點擊右側的“窗口屬性”按鈕,在“窗口名稱”中輸入“串口自發自收演示”字符串對窗口進行命名。雙擊“串口自發自收演示”進入動畫組態界面。“串口自發自收演示”如同一張白紙,用戶可以從圖2-13所示的工具箱中選取構件添加到窗口中,當鼠標指向某個構件時,會彈出提示信息,鼠標變成“十”字形,在窗口上點擊鼠標左鍵,然后向右下角拖拉鼠標,達到指定大小時,釋放鼠標左鍵,這時所選中的構件便放在了窗口中。此例分別向窗口添加了標簽構件、輸入框構件和標準按鈕構件。可參考二維碼視頻講解。

圖2-12 MCGSE主界面圖

圖2-13 MCGSE的工具箱

按圖2-14所示界面布置各個構件,設定各個標準按鈕與標簽的顯示文本。輸入框既可以用于信息的輸入,也可以用于顯示(相當于標簽)。

     圖2-14 MCGSE動畫組態窗口

(2)定義各個變量 窗口中的構件需要與變量進行關聯,能夠實時反映變量值的變化。因此,需要在實時數據庫中建立相應的變量,用于計算、存儲和顯示,如圖2-15所示。每一個變量包括其名字、類型和注釋,名字用于在程序腳本中引用,類型是數據結構,注釋方便用戶記憶與使用。如圖2-16所示,定義“Len”變量時,可以對其設置數據類型、賦初值、設定范圍、添加注釋等,變量一旦被定義,便可以與標簽、輸入框等界面構件進行關聯。可參考二維碼視頻講解。

圖2-15 實時數據庫中各變量類型及注釋窗口

圖2-16 數據對象屬性設置窗口

(3)變量與關系式鏈接 雙擊組態窗口中整數下方的輸入框構件,彈出如圖2-17所示的界面,輸入框構件可以關聯變量,點擊“?”按鈕,在數據庫中選中要關聯的變量,這個輸入框構件便與變量聯系在一起,變量值改變,輸入框構件內的值發生相應變化,同理,用戶在輸入框構件內輸入新值,數據庫中的變量也會實時更新。

圖2-17 輸入框構件與變量鏈接窗口

標簽構件與輸入框構件有區別,可以關聯表達式,點擊“?”按鈕后可以輸入變量、函數組成的表達式,如圖2-18所示,比輸入框構件更加靈活,此處的“浮點數(二進制)”“指數(二進制)”和“尾數(二進制)”等構件都與表達式進行了關聯。

圖2-18 標簽與表達式鏈接窗口

圖2-19采用黑色邊框指示了輸入框構件關聯的變量和標簽構件關聯的表達式,用戶可以根據需要自行添加或刪除,只要保證輸入框構件與變量類型、標簽構件與表達式類型相一致即可,例如,要顯示數值型數據,則變量或表達式必須為數值型,而不能是符號型或開關型。可上方參考二維碼視頻講解。

圖2-19 輸入框構件與變量及標簽與表達式關聯示意圖

(4)編寫轉換代碼 雙擊按鈕構件,如圖2-20所示,在“腳本程序”頁中選中“抬起腳本”,添加代碼,稱為腳本程序。

圖2-20 標準按鈕構件屬性設置界面

腳本的完整代碼如下:

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 

  '變量的初始化及計算
  二進制=!I2Bin(!Hex2I(數據))
  指數=!Bin2I(!mid(二進制,2,8))-127
  IF指數>=0 then
   整數=!Bin2I(!left("1"+!right(二進制,23),指數+1))
  ELSE
   整數=0.0
  ENDIF
 
  '根據浮點數二進制的首位確定數值的正負
  if !StrComp(!Left(二進制,1),"1")=0 then
   Sign=-1.0
  else
   Sign=1.0
  endif
 
  '循環前各變量賦初值
  Len=!Len(!I2Bin(!Hex2I(數據)))
  IF指數>=0 THEN
   Start=1+8+1+指數
  ELSE
   Start=1+8+1
  ENDIF
 
  IF指數>=0 then
   n=Len-Start
   i=1
   小數=0.0
  ELSE
   n=23+指數
   i=1
  小數=2^指數
  ENDIF
 
  '循環計算浮點數小數部分的值
  WHILE (n>0)
   IF指數>=0 THEN
    小數=小數+!Val(!mid(二進制,Start,1))/2^i
  ELSE
    小數=小數+!Val(!mid(二進制,Start,1))*2^(指數-i)
   ENDIF
   i=i+1
   n=n-1
   Start=Start+1
  ENDWHILE
 
  '獲得浮點數的數值
  浮點數=整數+小數
  浮點數=浮點數*Sign

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 

(5)運行程序 點擊MCGSE工具欄中的“”按鈕,下載工程并進入運行環境,程序執行后如圖2-21所示。將鼠標放在“浮點數(16進制)”后面的輸入框中,會彈出界面鍵盤,輸入“C229D3F4”,中間不能有空格,點擊“16進制->浮點數”按鈕,腳本程序開始執行,各個變量經過計算得到相應的值,與變量關聯的標簽和輸入框構件實時顯示變量的值,從而出現圖2-21所示的結果。可參考二維碼視頻講解。

圖2-21 程序執行界面

主站蜘蛛池模板: 蒲江县| 英吉沙县| 宣恩县| 花莲县| 勐海县| 廊坊市| 砀山县| 修水县| 泾源县| 买车| 兴海县| 曲靖市| 武定县| 苍梧县| 扬中市| 沐川县| 赤壁市| 石狮市| 金溪县| 宜宾市| 墨江| 林周县| 肥西县| 绥阳县| 上犹县| 客服| 许昌市| 德格县| 东乌| 曲沃县| 剑阁县| 库车县| 三穗县| 砚山县| 克什克腾旗| 玉屏| 汪清县| 兴城市| 乐至县| 周口市| 公主岭市|