轉(zhuǎn)換指令是指對(duì)操作數(shù)的類型進(jìn)行轉(zhuǎn)換,包括數(shù)據(jù)的類型轉(zhuǎn)換、碼的類型轉(zhuǎn)換以及數(shù)據(jù)和碼之間的類型轉(zhuǎn)換。
一、數(shù)據(jù)類型轉(zhuǎn)換
(一)字節(jié)與整數(shù)
1、字節(jié)到整數(shù)
bti,字節(jié)轉(zhuǎn)換為整數(shù)指令。使能輸入有效時(shí),將字節(jié)輸入數(shù)據(jù)in轉(zhuǎn)換成整數(shù)類型,并將結(jié)果送到out輸出。字節(jié)型是無(wú)符號(hào)的,所以沒(méi)有符號(hào)擴(kuò)展。
使能流輸出eno斷開(kāi)的出錯(cuò)條件:sm4.3 (運(yùn)行時(shí)間);0006 (間接尋址)。
指令格式: bti in, out
例: bti vb0, ac0
2、整數(shù)到字節(jié)
itb,整數(shù)轉(zhuǎn)換字節(jié)指令。使能輸入有效時(shí),將整數(shù)輸入數(shù)據(jù)in轉(zhuǎn)換成字節(jié)類型,并將結(jié)果送到out輸出。輸入數(shù)據(jù)超出字節(jié)范圍(0~255)則產(chǎn)生溢出。
移位指令影響的特殊存儲(chǔ)器位:sm1.1(溢出)。
使能流輸出eno斷開(kāi)的出錯(cuò)條件:sm1.1(溢出);sm4.3(運(yùn)行時(shí)間);0006(間接尋址)。
指令格式: itb in, out
例: itb ac0, vb10
(二)整數(shù)與雙整數(shù)
1、雙整數(shù)到整數(shù)
dti,雙整數(shù)轉(zhuǎn)換為整數(shù)指令。使能輸入有效時(shí),將雙整數(shù)輸入數(shù)據(jù)in轉(zhuǎn)換成整數(shù)類型,并將結(jié)果送到out輸出。輸入數(shù)據(jù)超出整數(shù)范圍則產(chǎn)生溢出。
移位指令影響的特殊存儲(chǔ)器位:sm1.1(溢出)。
使能流輸出eno斷開(kāi)的出錯(cuò)條件:sm1.1(溢出);sm4.3(運(yùn)行時(shí)間);0006(間接尋址)。
指令格式: dti in, out
例: dti ac0, vw20
2、整數(shù)到雙整數(shù)
itd,整數(shù)轉(zhuǎn)換為雙整數(shù)指令。使能輸入有效時(shí),將整數(shù)輸入數(shù)據(jù)in轉(zhuǎn)換成雙整數(shù)類型(符號(hào)進(jìn)行擴(kuò)展),并將結(jié)果送到out輸出。
使能流輸出eno斷開(kāi)的出錯(cuò)條件:sm4.3(運(yùn)行時(shí)間);0006(間接尋址)。
指令格式:itd in, out
例:itd vw0, ac0
(三)雙整數(shù)與實(shí)數(shù)
1、實(shí)數(shù)到雙整數(shù)
圖1 實(shí)數(shù)到雙整數(shù)
2、雙整數(shù)到實(shí)數(shù)
dtr,雙整數(shù)轉(zhuǎn)換實(shí)數(shù)指令。使能輸入有效時(shí),將雙整數(shù)輸入數(shù)據(jù)in轉(zhuǎn)換成實(shí)型,并將結(jié)果送到out輸出。
使能流輸出eno斷開(kāi)的出錯(cuò)條件:sm4.3(運(yùn)行時(shí)間);0006(間接尋址)。
指令格式: dtr in, out
例: dtr ac0, vd100
圖2 雙整數(shù)到實(shí)數(shù)
圖3 雙整數(shù)到實(shí)數(shù)
(四)整數(shù)與bcd碼
1、bcd碼到整數(shù)
bcdi,bcd碼轉(zhuǎn)換為整數(shù)指令。使能輸入有效時(shí),將bcd碼輸入數(shù)據(jù)in轉(zhuǎn)換成整數(shù)類型,并將結(jié)果送到out輸出。輸入數(shù)據(jù)in的范圍為0~9999。
指令格式:bcdi out
例:bcdi ac0
圖4 bcd碼到整數(shù)
2、整數(shù)到bcd碼
ibcd,整數(shù)轉(zhuǎn)換為bcd碼指令。使能輸入有效時(shí),將整數(shù)輸入數(shù)據(jù)in轉(zhuǎn)換成bcd碼類型,并將結(jié)果送到out輸出。輸入數(shù)據(jù)in的范圍為0~9999。
指令格式:ibcd out
例:ibcd ac0
圖5 整數(shù)到bcd碼
(五)程序?qū)嵗?br>模擬量控制程序中的數(shù)據(jù)類型轉(zhuǎn)換。將模擬量輸入端采樣值由整數(shù)轉(zhuǎn)換為雙整數(shù),然后由雙整數(shù)轉(zhuǎn)換為實(shí)數(shù),再除以一個(gè)比例因子得到plc可以處理的范圍內(nèi)的值。
圖6 程序?qū)嵗?br>
二、編碼和譯碼
1、編碼
enco,編碼指令。使能輸入有效時(shí),將字型輸入數(shù)據(jù)in的最低有效位(值為1的位)的位號(hào)輸出到out所指定的字節(jié)單元的低4位。即用半個(gè)字節(jié)來(lái)對(duì)一個(gè)字型數(shù)據(jù)16位中的1位有效位進(jìn)行編碼。
使能流輸出eno斷開(kāi)的出錯(cuò)條件:sm4.3(運(yùn)行時(shí)間);0006(間接尋址)。
指令格式: enco in, out
例: enco ac0, vb0
以本指令為例,指令執(zhí)行情況如表所示。
圖7 編碼指令執(zhí)行結(jié)果
2、譯碼
deco,譯碼指令。使能輸入有效時(shí),將字節(jié)型輸入數(shù)據(jù)in的低4位所表示的位號(hào)對(duì)out所指定的字單元的對(duì)應(yīng)位置1,其他位置0。即對(duì)半個(gè)字節(jié)的編碼進(jìn)行譯碼來(lái)選擇一個(gè)字型數(shù)據(jù)16位中的1位。
使能流輸出eno斷開(kāi)的出錯(cuò)條件:sm4.3(運(yùn)行時(shí)間);0006(間接尋址)。
指令格式: deco in, out
例: deco vb0, ac0
圖8 譯碼指令執(zhí)行結(jié)果
三、七段碼
seg,七段碼指令
使能輸入有效時(shí),將字節(jié)型輸入數(shù)據(jù)in的低4位有效數(shù)字產(chǎn)生相應(yīng)的七段碼,并將其輸出到out所指定的字節(jié)單元。
四、字符串轉(zhuǎn)換
1、指令種類
◆ ascii碼轉(zhuǎn)換16進(jìn)制指令
◆ 16進(jìn)制到ascii碼
◆ 整數(shù)到ascii碼
◆ 雙整數(shù)到ascii碼
◆ 實(shí)數(shù)到ascii碼
2、指令介紹
下面僅以ascii碼轉(zhuǎn)換16進(jìn)制指令為例說(shuō)明字符串與其他數(shù)據(jù)類型之間的轉(zhuǎn)換。
ath,ascii碼轉(zhuǎn)換16進(jìn)制指令:
指令盒中有3個(gè)操作數(shù):in,開(kāi)始字符的字節(jié)地址,字節(jié)類型;len,字符串的長(zhǎng)度,字節(jié)類型,最大長(zhǎng)度為255;out,輸出目的開(kāi)始字節(jié)地址,字節(jié)類型。使能輸入有效 時(shí),把從in開(kāi)始的長(zhǎng)度為len的ascii碼轉(zhuǎn)換為16進(jìn)制數(shù),并將結(jié)果送到out開(kāi)始的字節(jié)進(jìn)行輸出。
3、程序?qū)嵗?br>
以上面的指令為例,條指令的執(zhí)行結(jié)果如表所示,程序如圖所示。
圖9 指令ath執(zhí)行結(jié)果
圖10 程序?qū)嵗?