1.指令特點(diǎn)與編程
S7-300/400的轉(zhuǎn)換指令功能相對(duì)單一,所有代碼轉(zhuǎn)換指令均為用于數(shù)據(jù)形式轉(zhuǎn)換的指令,且不可以實(shí)現(xiàn)ASCII碼、字符串的轉(zhuǎn)換,也無譯碼功能。
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)換一般只能通過累加器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ù)值超過了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(lǐng) 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í),通過CEIL指令,可以將浮點(diǎn)數(shù)轉(zhuǎn)換為大于等于該浮點(diǎn)數(shù)的最小整數(shù);通過FLOOR指令,可以將浮點(diǎn)數(shù)轉(zhuǎn)換為小于等于該浮點(diǎn)數(shù)的最大整數(shù)。
S7-300/400的轉(zhuǎn)換指令功能相對(duì)單一,所有代碼轉(zhuǎn)換指令均為用于數(shù)據(jù)形式轉(zhuǎn)換的指令,且不可以實(shí)現(xiàn)ASCII碼、字符串的轉(zhuǎn)換,也無譯碼功能。
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)換一般只能通過累加器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ù)值超過了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(lǐng) 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í),通過CEIL指令,可以將浮點(diǎn)數(shù)轉(zhuǎn)換為大于等于該浮點(diǎn)數(shù)的最小整數(shù);通過FLOOR指令,可以將浮點(diǎn)數(shù)轉(zhuǎn)換為小于等于該浮點(diǎn)數(shù)的最大整數(shù)。