- PLC模擬量與通信控制應用實踐
- 李金城編著
- 3210字
- 2018-12-30 10:50:06
1.6 數的表示和運算
在數字控制系統中,信號的傳送與寄存都是以二進制數0、1進行的。一個16位存儲器所存儲的僅是一個16位的二進制0和1的組合。它本身并不代表任何東西,如果把它看成一個二進制的數的組合,它就可以代表一個用二進制表示的正整數和0,這種表示叫做純二進制數表示。但是在模擬量控制中要處理的數不僅是正整數和0,還有負數、小數等。因此,用什么方法來表示數的正、負,用什么方法來表示整數和小數,這是提高運算精度和運算速度的一個重要問題。目前在數字控制系統中,數的表示有兩種方法,即定點數和浮點數。采用定點數運算的稱為定點運算(又稱為整數運算)。采用浮點數運算的稱為浮點運算(又稱為小數運算)。這兩種運算是目前在PLC中廣泛采用的基本運算方法。
1.6.1 定點數和浮點數
1. 定點數
所謂定點數,是指人為地將小數點的位置定在某一位。一般有兩種情況:一種是小數點位置定在最高位的左邊,則表示的數為純小數;另一種是把小數點位置定在最低位的右邊,則表示的數為整數。大部分數字控制設備都采用整數的定點數表示。
那么正數、負數又是如何表示的呢?這里要先介紹一下原碼和補碼的概念。
原碼就是指用純二進制編碼表示的二進制數,而補碼就是對原碼進行按位求反,再加1后的二進制數。
【例1】求K25的原碼和補碼(以16位二進制計算)。
K25的原碼是B0000000000011001(H0009);
對原碼求反得B1111111111100110(HFFE6);
加1為K25的補碼是B1111111111100111(HFFE7)。
關于十進制與二進制數之間的轉換見7.1.4節。
定點數是這樣規定正、負數的:取最高位為符號位,0表示正數,1表示負數,后面各位為表示的值。如為正數,則以其原碼表示;如為負數,則用原碼的補碼表示。圖1-33所示為16位二進制定點數的圖示。

圖1-33 16位定點數圖示
下面通過一個例子來說明上面介紹的定點數的表示。
【例2】寫出K78和K-40的定點數表示。
K78為正數,用原碼表示:B0000000000101110(H002E)
K-40是負數,先寫出K40的原碼,再求反加1,K-40的定點數表示是:
B1111111111011000(HFFD8)
用定點數表示的整數,其符號位是固定在最高位,后面才是真正的數值。其數值的大小范圍與位數有關。常用的是16位和32位,它們的范圍為
16位:(-32768~32767)
32位:(-2147483648~2147483647)
有兩個定點數的表示是規定的,不照定義求出(以16位為例)
K0:B0000000000000000(H0000)
K-32768:B1000000000000000(H8000)
2. 浮點數
定點數雖然解決了整數的運算,但不能解決小數運算的問題,而且定點數在運算時總是把相除后的余數舍去,這樣經多次運算后就會產生很大的運算誤差。定點數運算范圍也不夠大。16位運算僅在-32678~+32676之間。這些原因都使定點數運算的應用受到了限制,而浮點數的表示不但解決了小數的運算,也提高了數的運算精度及數的運算范圍。
浮點數和工程上的科學記數法類似。科學記數法是任何一個絕對值大于10(或小于1)的數都可以寫成 a×10n的形式,(其中1<a<10)。例如,325 = 3.25×102,0.0825 = 8.25×10 -2等。如果寫出原數,就會發現,其小數點的位置與指數n有關。例如
3.14159×102 = 314.159
3.14159×104 = 31415.9
就好像小數點的位置隨著 n 在浮動。把這種方法應用到數字控制設備中就出現了浮點數表示方法。
所謂浮點數,就是尾數固定,小數點的位置隨指數的變化而浮動的數的表示方法。不同的數字控制設備其浮點數的表示方法也不同。這里僅介紹FX2N PLC的浮點數表示方法。
FX2N PLC中浮點數有兩種,分別介紹如下。
1)十進制浮點數
如圖1-34所示,用兩個連續編號的數據存儲器Dn和Dn+1來處理十進制浮點數,其中Dn存浮點數的尾數,Dn+1存浮點數的指數。

圖1-34 十進制浮點數圖示
則十進制浮點數 = Dn × 10Dn+1。
【例3】十進制浮點數存儲器存儲數值如下:(D0)=K356,(D1)=K4,試寫出十進制浮點數。
十進制浮點數=356 × 104。
FX2N PLC對十進制浮點數有一些規定:
(1)Dn、Dn+1的最高位均為符號位。0為正,1為負。
(2)Dn、Dn+1的取值范圍為
尾數Dn = ±(1000~9999)或0
指數Dn+1 = -41~35。
此外,在尾數Dn中,不存在100,如為100的場合變成1000 ×10-1。
(3)十進制浮點數的處理范圍為最小絕對值1175×10-41,最大絕對值3402×1035。
【例4】D2、D3為十進制浮點數存儲單元。(D2) = H0033,(D3) = HFFFD,試問十進制浮點數為多少?
(D2) = H0033 = K51,(D3) = HFFFD = K-3,
十進制浮點數=5.1 × 10-3=0.0051
在FX2N PLC中,十進制浮點數不能直接用來進行運算,它和二進制浮點數之間可以互相轉換。十進制浮點數主要是用來進行數據監示。
2)二進制浮點數
二進制浮點數也是采用一對數據存儲器Dn和Dn+1。其規定如圖1-35所示。

圖1-35 二進制浮點數圖示
各部分說明如下。
符號位S:b31位。b31=0,正數;b31=1,負數。
指數N:b23~b30位共8位。(b23~b30)=0或1,
N = b23×20+b24×21+…+b29×26+b30×27。
尾數a:b0~b22位共23位。(b0~b22)=0或1,
a = b22×2-1+b21×2-2+…+b2×2-21+b1×2-22+b0×2-23。
二進制浮點數=
二進制浮點數遠比十進制浮點數復雜得多。其最大的缺點是難以判斷它的數值。在PLC內部,其浮點運算全部都是采用二進制浮點數進行。
采用浮點數運算不但可以進行小數運算,還可以大大提高運算精度和速度。這正是控制所要求的。
1.6.2 定點運算(整數運算)
定點運算也叫二進制運算,FX系列PLC都具有定點運算的功能。FX系列PLC的定點運算指令有6個,可16位運用,也可32位運用,指令格式功能見表1-2(16位)和表1-3(32位)。表中源址和目標地址均是以存儲器D為例說明,實際上,它們都可以用組合位元件和其他字元件。關于指令的進一步說明,可參看編程手冊。指令的應用比較容易理解,這里不再做詳細解讀。
表1-2 二進制四則運算指令(16位)

表1-3 二進制四則運算指令(32位)

指令分為連續執行型和脈沖執行型,如果是連續執行型,那么在驅動條件成立時,每一個掃描周期,指令都會執行一次。如圖1-36所示,在X0接通期間,每個掃描周期,存儲器D0的內容都會加上10再存入D0。如果只希望一次性執行,采用脈沖執行型即可,在圖1-37中,兩種處理方法均可。

圖1-36 連續執行型說明圖示

圖1-37 脈沖執行型說明圖示
1.6.3 浮點運算(小數運算)
1. 浮點數功能指令
和定點運算不同,FX系列PLC中FX1S,FX1N不具備浮點運算功能。FX2N的浮點數功能指令見表1-4。
表1-4 FX2N的浮點數功能指令

本節僅介紹其中有關浮點數四則運算的相關指令,其余指令可參看編程手冊。
2. 浮點數輸入
FX2N PLC不具備直接輸入浮點數(下稱小數)的功能。在浮點數功能指令中,參與運算的數必須是小數才能完成運算功能。因此,在應用浮點數功能指令前,存在一個把整數和小數如何輸入到浮點數運算所指定的軟元件中的問題。這里僅有一個例外,即常數K/H所表示的整數在運算過程中會自動轉換成小數而參與運算,如圖1-38所示。

圖1-38 常數K/H自動轉換小數說明圖示
指令FLT為把整數轉換成小數的功能指令,指令格式如圖1-39所示。

圖1-39 整數→小數轉換指令
解讀:當X0接通時,把(D10)里所寄存的整數轉換成小數寄存在(D13,D12)中,指令中源址和目的址中所用軟元件僅為D存儲器。
【例5】試把整數K100轉換成小數寄存在(D11,D10)中。
轉換程序如圖1-40所示。可以看出,(D11,D10)存的是小數100.000。FX2N PLC的小數運算僅顯示三位小數。

圖1-40 例5圖示
【例6】試把小數3.14輸入(D11,D10)。
本例說明小數的輸入方法。先將小數乘以N倍變成整數,然后將該整數轉換成小數,再用浮點除法指令除以N倍即為輸入小數,如圖1-41所示。

圖1-41 小數輸入程序例
3. 浮點數四則運算
浮點數的四則運算與定點數類似,有加、減、乘、除等,參與運算的數必須是小數表示。由于FX2N PLC中浮點數為32位運算,所以其指令運用時必須加D,如DEADD、DESUB、DEMUL、DED1V等。同樣也有連續執行型和脈沖執行型的區分,應用時必須注意。
浮點數主要應用在模擬量中需要保留小數的四則運算中。
【例7】某物理量其輸出Y與輸入X之間的關系可用如下公式表示,試編制運算程序。

設X存(D2),輸出Y存(D51,D50)。運算程序如圖1-42所示。

圖1-42 浮點數的四則運算程序
1.6.4 二-十進制浮點數轉換
浮點數功能指令中有2條關于二進制浮點數和十進制浮點數轉換指令,指令格式如圖1-43所示。

圖1-43 二-十進制浮點數轉換
二進制→十進制轉換指令DEBCD主要用于取出十進制數供給外部設備進行監控和顯示用。而十進制→二進制轉換指令則提供了另外一種小數的輸入方法。程序如圖1-44所示。同樣是將小數3.14輸入到(D11,D10)。

圖1-44 小數的另一種輸入程序
程序第四行是為了方便觀察(D11,D10)中的確是3.14而設計的,應用中無須添加。