1.指令特點與編程
s7-300/400的轉(zhuǎn)換指令功能相對單一,所有代碼轉(zhuǎn)換指令均為用于數(shù)據(jù)形式轉(zhuǎn)換的指令,且不可以實現(xiàn)ascii碼、字符串的轉(zhuǎn)換,也無譯碼功能。
s7-300/400的數(shù)據(jù)形式轉(zhuǎn)換指令主要有如下特點:
①轉(zhuǎn)換指令主要有bcdj、i-bcd、bcd_di、di—bcd、di_ri、i_di、round、trunc、ceil、floor等,可以進行十六進制數(shù)與bcd之間的轉(zhuǎn)換、整數(shù)與浮點數(shù)之間的轉(zhuǎn)換、浮點數(shù)的“取整”等操作。
②與移位指令一樣,s7-300/400的數(shù)據(jù)形式轉(zhuǎn)換一般只能通過累加器1進行,當存儲器需要移位時,應(yīng)首先將存儲器的內(nèi)容移動到累加器l中。
③s7-300/400的移位操作只能對字、雙字長的數(shù)據(jù)進行,不能用于字節(jié)。
數(shù)據(jù)形式轉(zhuǎn)換指令的梯形圖編程與s7-200相似,如需要將輸入字iw20的bcd數(shù)據(jù)(十進制數(shù)據(jù))轉(zhuǎn)換為整數(shù)(十六進制數(shù)據(jù))的程序格式如圖10-6.6所示。
從圖10-6.6的指令表程序可以看出,數(shù)據(jù)形式轉(zhuǎn)換的第一步是將“源數(shù)據(jù)”iw20裝入累加器l中,然后再對累加器l的內(nèi)容進行轉(zhuǎn)換,結(jié)果傳送到目標存儲器mw100中。
2.bcd轉(zhuǎn)換指令
s7-300/400的數(shù)據(jù)形式轉(zhuǎn)換指令bcd i、i__bcd、bcd—di、di__ bcd用于十六進制數(shù)與bcd
之間的轉(zhuǎn)換。
編程需要注意以下幾點:
①s7-300/400的bcd數(shù)據(jù)只能對字、雙字長的數(shù)據(jù)進行,不能用于字節(jié)。
②指令bcd i、lbcd用于16位整數(shù)與bcd間的轉(zhuǎn)換,由于數(shù)據(jù)帶符號,因此只能轉(zhuǎn)換3位bcd碼,bcd數(shù)據(jù)的范圍為-999~+999。指令bcd di、di__ bcd用于32位整數(shù)與bcd間的轉(zhuǎn)換,同樣帶符號,因此只能轉(zhuǎn)換7位bcd碼,bcd數(shù)據(jù)的范圍為-9999999~+9999999。
③16位整數(shù)的bcd存儲格式為:
格式中的空余位(16位整數(shù)的bit14~bit12、32位整數(shù)的bit30~bit28),一般取與符號位相同的值,如:正數(shù)為“o”;負數(shù)為“l(fā)”。
④當16位、32位整數(shù)轉(zhuǎn)換為bcd時,如果出現(xiàn)大于9的十進制數(shù)值(如1100等),或者轉(zhuǎn)換后的數(shù)值超過了bcd格式允許存儲的范圍,將出現(xiàn)轉(zhuǎn)換錯誤,并導(dǎo)致plc的停止。
3.整數(shù)、浮點數(shù)轉(zhuǎn)換指令
s7-300/400的數(shù)據(jù)形式轉(zhuǎn)換指令i di、di r用于16位整數(shù)與32位整數(shù)、32位整數(shù)與浮點數(shù)之間的轉(zhuǎn)換;round、trunc的作用、意義與s7-200相同,用于對浮點數(shù)的小數(shù)部位處理;ceil、floor是當浮點與整數(shù)相差很大時的兩種不同處理方式。
idi指令可以將16位整數(shù)轉(zhuǎn)換為32位整數(shù),其實質(zhì)只是將符號位從原16位整數(shù)的bit15移到32位整數(shù)的bit31上,其余數(shù)據(jù)不變或增補0而已。
round指令是將浮點數(shù)的小數(shù)部分四舍五入轉(zhuǎn)換成雙整數(shù);trunc指令是將浮點數(shù)的小數(shù)部分舍去轉(zhuǎn)換成雙整數(shù)。
由于浮點數(shù)的數(shù)據(jù)表示范圍要遠遠大于雙字長整數(shù)。當浮點數(shù)的值大于整數(shù)時,通過ceil指令,可以將浮點數(shù)轉(zhuǎn)換為大于等于該浮點數(shù)的最小整數(shù);通過floor指令,可以將浮點數(shù)轉(zhuǎn)換為小于等于該浮點數(shù)的最大整數(shù)。