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