西門子 S7-200SMARTPLC數(shù)據(jù)轉(zhuǎn)換指令詳細介紹
轉(zhuǎn)換指令是對操作數(shù)的類型進行轉(zhuǎn)換,并輸出到的目標地址中去。西門子 S7-200SMARTPLC的轉(zhuǎn)換指令包括數(shù)據(jù)類型轉(zhuǎn)換、數(shù)據(jù)的編碼和譯碼、ASCII碼轉(zhuǎn)換等指令。
數(shù)據(jù)類型轉(zhuǎn)換指令
在S7-200SMARTPLC中的數(shù)據(jù)類型主要有字節(jié)型、整數(shù)型、雙整數(shù)型和實數(shù)型,使用了 BCD碼、ASCII碼、十進制數(shù)和十六進制數(shù)。不同功能的指令對操作數(shù)類型要求不同,因此,許多指令執(zhí)行前需對操作數(shù)進行類型的轉(zhuǎn)換。
數(shù)據(jù)類型轉(zhuǎn)換主要有 BCD碼與整數(shù)之間的轉(zhuǎn)換、字節(jié)與整數(shù)之間的轉(zhuǎn)換、整數(shù)與雙字整數(shù)之間的轉(zhuǎn)換和雙字整數(shù)與實數(shù)的轉(zhuǎn)換等。
(1)BCD碼與整數(shù)之間的轉(zhuǎn)換
在一些數(shù)字系統(tǒng),如計算機和數(shù)字式儀器中,如數(shù)碼開關(guān)設(shè)置數(shù)據(jù),往往采用二進制碼表示十進制數(shù)。通常,把用一組四位二進制碼來表示一位十進制數(shù)的編碼方法稱為 BCD碼。
4位二進制碼共有16種組合,可從中選取10種組合來表示0~9這10個數(shù),根據(jù)不同的選取方法,可以編制出多種 BCD碼,其中8421BCD碼*常用。十進制數(shù)與8421BCD碼的對應(yīng)關(guān)系如表5-10所示。如:十進制數(shù)1234化成8421BCD碼為0001001000110100。
表5-10 十進制數(shù)與8421BCD碼對應(yīng)表
BCD碼與整數(shù)之間的轉(zhuǎn)換是對無符號操作數(shù)進行的,其轉(zhuǎn)換指令如表5-11所示。輸入IN 和輸出 OUT 的類型為字。
使用 BCDI指令可將IN 端輸入的 BCD 碼轉(zhuǎn)換成整數(shù),產(chǎn)生結(jié)果送入 OUT 的變量中。IN 輸入的 BCD碼范圍為0~9999。
使用IBCD指令可將IN 端輸入的整數(shù)轉(zhuǎn)換成 BCD 碼,產(chǎn)生結(jié)果送入 OUT 的變量中。IN 輸入的整數(shù)范圍為0~9999。
表5-11 BCD碼與整數(shù)之間的轉(zhuǎn)換指令
若為無效BCD碼時,特殊標志位SM1.6被置1。輸入IN 和輸出 OUT 操作數(shù)地址*相同,若不相同時,需使用指令:
MOV IN,OUT
BCDI OUT
例5-6 使用BCD碼與整數(shù)之間的轉(zhuǎn)換指令,將 VW100中的BCD碼轉(zhuǎn)換成整數(shù),并存放到 AC0中;將 VW200中的整數(shù)轉(zhuǎn)換成BCD碼,并存放到 AC1中。其程序如表5-12所示。假設(shè) VW100中 的 BCD 為 1001001000110101,執(zhí) 行 BCDI指 令 后,轉(zhuǎn) 換 的 整 數(shù) 為 9235;假 設(shè)VW200中的整數(shù)為5421,執(zhí)行IBCD指令后,轉(zhuǎn)換的BCD碼為0101010000100001。
表5-12 BCD碼與整數(shù)之間的轉(zhuǎn)換指令程序
(2)字節(jié)與整數(shù)之間的轉(zhuǎn)換
字節(jié)與整數(shù)之間的轉(zhuǎn)換是對無符號操作數(shù)進行的,其轉(zhuǎn)換指令如表5-13所示。
表5-13 字節(jié)與整數(shù)之間的轉(zhuǎn)換指令
使用 BTI指令可將IN 端輸入的字節(jié)型數(shù)據(jù)轉(zhuǎn)換成整數(shù)型數(shù)據(jù),產(chǎn)生結(jié)果送入 OUT 的單元中。使用ITB指令可將IN 端輸入的整數(shù)型數(shù)據(jù)轉(zhuǎn)換成字節(jié)型數(shù)據(jù),產(chǎn)生結(jié)果送入OUT 的變量中。被轉(zhuǎn)換的值應(yīng)為有效的整數(shù),否則溢出位SM1.1被置1。
(3)整數(shù)與雙字整數(shù)之間的轉(zhuǎn)換
整數(shù)與雙字整數(shù)之間的轉(zhuǎn)換指令如表5-14所示。
表5-14 整數(shù)與雙字整數(shù)之間的轉(zhuǎn)換指令
ITD指令是將輸入IN 的整數(shù)型數(shù)據(jù)轉(zhuǎn)換成雙整數(shù)型數(shù)據(jù),產(chǎn)生的結(jié)果送入 OUT 存儲單元,輸入為整數(shù)型數(shù)據(jù),輸出為雙整數(shù)型數(shù)據(jù),要進行符號擴展。
DTI指令是將輸入IN 的雙整數(shù)型數(shù)據(jù)轉(zhuǎn)換成整數(shù)型數(shù)據(jù),產(chǎn)生的結(jié)果置入 OUT 存儲單元,輸入為雙整數(shù)型數(shù)據(jù),輸出為整數(shù)型數(shù)據(jù)。被轉(zhuǎn)換的輸入IN 值應(yīng)為有效雙整數(shù),否則SM1.1被置1。
(4)雙字整數(shù)與實數(shù)的轉(zhuǎn)換
雙字整數(shù)與實數(shù)的轉(zhuǎn)換指令如表5-15所示。
表5-15 雙字整數(shù)與實數(shù)的轉(zhuǎn)換指令
DTR指令是將輸入IN 的雙字整數(shù)型數(shù)據(jù)轉(zhuǎn)換為實數(shù)型數(shù)據(jù),產(chǎn)生的結(jié)果送入 OUT 的存儲單元,IN 輸入的為有符號的32位雙字整數(shù)型數(shù)據(jù)。
四舍五入和舍去小數(shù)指令都是實數(shù)轉(zhuǎn)換為雙字整數(shù)的取整指令。執(zhí)行 ROUND 指令時,實數(shù)的小數(shù)部分四舍五入;執(zhí)行 TRUNC 指令時,實數(shù)的小數(shù)部分舍去。若輸入的實數(shù)值太大,無法用雙字整數(shù)表示時,SM1.1被置1。
例5-7 用實數(shù)運算求直徑為32mm 的圓面積,將結(jié)果轉(zhuǎn)換為整數(shù)。
分析:圓的面積=圓半徑的平方×π,圓半徑的平方可使用 EXP (2×LN (32/2)),編寫的 PLC程序如表5-16所示。
例5-8 1英寸等于2.54cm,假設(shè)英尺數(shù)由數(shù)碼開關(guān)通過IW0輸入 (BCD 碼),則長度由英寸轉(zhuǎn)換成厘米,且厘米數(shù)由 QW0用 BCD碼輸出時,其程序編寫如表5-17所示。
表5-16 求圓面積的程序
表5-17 英寸與厘米的轉(zhuǎn)換程序
ASCII 字符數(shù)組轉(zhuǎn)換指令
ASCII碼 (AmericanStandardCodeforInformationInterchange)為美國標準信息交換碼,在計算機系統(tǒng)中使用泛。西門子S7-200SMARTPLC的 ASCII字符數(shù)組轉(zhuǎn)換指令包括整數(shù)轉(zhuǎn)換為 ASCII碼指令、雙整數(shù)轉(zhuǎn)換為 ASCII碼指令、實數(shù)轉(zhuǎn)換為 ASCII碼指令、十六進制整數(shù)與 ASCII碼相互轉(zhuǎn)換指令,指令如表5-18所示。
表5-18 ASCII字符數(shù)組轉(zhuǎn)換指令
(1)整數(shù)轉(zhuǎn)換為 ASCII碼指令ITA
整數(shù)轉(zhuǎn)換為 ASCII碼指令ITA (IntegertoASCII)把輸入端IN 的有符號整數(shù)轉(zhuǎn)換成ASCII字符串,其轉(zhuǎn)換結(jié)果存入以 OUT 為起始字節(jié)地址的8個連續(xù)字節(jié)的緩沖區(qū)中,FMT小數(shù)點右側(cè)的轉(zhuǎn)換精度和小數(shù)點是使用逗號還是點號。整數(shù)轉(zhuǎn) ASCII碼指令的格式操作數(shù)如圖5-2所示,輸出緩沖區(qū)的大小始終是8個字節(jié),nnn表示輸出緩沖區(qū)中小數(shù)點右側(cè)的數(shù)字位數(shù),nnn的有效范圍為0~5,若 nnn=0,小數(shù)右側(cè)的位數(shù)為0,轉(zhuǎn)換時數(shù)值沒有小數(shù)點;若nnn>5時,輸出緩沖區(qū)會被空格鍵的 ASCII碼填充,此時無法輸出。C整數(shù)和小數(shù)點的分隔符,當 C=1時,分隔符為 “,";當 C=0時,分隔符為 “.",FMT的高4位必須為0。
在圖5-2中給出了一個數(shù)值的例子,其格式為使用點號 (C=0),小數(shù)點右側(cè)有3位小
圖5-2 整數(shù)轉(zhuǎn) ASCII碼指令的 FMT操作數(shù)
數(shù) (nnn=011),輸出緩沖區(qū)格式符合以下規(guī)則:
① 正數(shù)值寫入輸出緩沖區(qū)沒有符號位;
② 負數(shù)值寫入輸出緩沖區(qū)時以負號 (-)開頭;
③ 小數(shù)點左側(cè)開頭的0 (除去靠近小數(shù)點的那個之外)被隱藏;
④ 數(shù)值在輸出緩沖區(qū) OUT 中是右對齊的。
例5-9 整數(shù)轉(zhuǎn) ASCII碼指令的使用。將 VW10中的整數(shù)轉(zhuǎn)換為從 VB100開始的8個ASCII碼字符,使用 16#0B 的 格 式,用 逗 號 作 小 數(shù) 點,保 留 3 位 小 數(shù),程 序 如 表 5-19所示。
表5-19 整數(shù)轉(zhuǎn) ASCII碼指令程序
(2)雙整數(shù)轉(zhuǎn)換為 ASCII碼指令 DTA
雙整數(shù)轉(zhuǎn)換為 ASCII碼指令 DTA (Double Integer to ASCII )把輸入端IN的有符號雙字整數(shù)轉(zhuǎn)換成 ASCII字符串,其轉(zhuǎn)換結(jié)果存入以 OUT 為起始字節(jié)地址的12個連續(xù)字節(jié)的緩沖區(qū)中。除輸入IN 為雙整數(shù)、輸出為12字節(jié)外,其它方面與整數(shù)轉(zhuǎn) ASCII碼指令相同。雙整數(shù)轉(zhuǎn)換為 ASCII碼指令的格式操作數(shù)如圖5-3所示。
圖5-3 雙整數(shù)轉(zhuǎn) ASCII碼指令的 FMT操作數(shù)
(3)實數(shù)轉(zhuǎn)換為 ASCII碼指令 RTA
實數(shù)轉(zhuǎn)換為 ASCII碼指令 RTA (RealtoASCII)是將輸入端IN 的實數(shù)轉(zhuǎn)換成 ASCII字符串,其轉(zhuǎn)換結(jié)果存入以 OUT 為起始字節(jié)地址的3~15個連續(xù)字節(jié)的緩沖區(qū)中。實數(shù)轉(zhuǎn)換為 ASCII碼指令的格式操作數(shù)如圖5-4所示。
西門子S7-200SMARTPLC的實數(shù)格式最多支持7位小數(shù),若顯示7位以上的小數(shù)會
圖5-4 實數(shù)轉(zhuǎn) ASCII碼指令的 FMT操作數(shù)
產(chǎn)生一個四舍五入的錯誤。圖5-4中,SSSS表示輸出緩沖區(qū) OUT 的大小,它的范圍為3~15個字節(jié)。輸出緩沖區(qū)的大小應(yīng)大于輸入實數(shù)小數(shù)點右邊的位數(shù),如實數(shù)-3.89546,小數(shù)點右邊有5位,SSS應(yīng)大于5,至少為6。與整數(shù)轉(zhuǎn) ASCII碼指令相比,實數(shù)轉(zhuǎn) ASCII碼的輸出緩沖區(qū)的格式還具有以下規(guī)則:
① 小數(shù)點右側(cè)的數(shù)值按照的小數(shù)點右側(cè)的數(shù)字位數(shù)被四舍五入;
②輸出緩沖區(qū)的大小應(yīng)至少比小數(shù)點右側(cè)的數(shù)字位多3個字節(jié)。
例5-10 實數(shù)轉(zhuǎn)ASCII碼指令的使用。將VD10中的實數(shù)轉(zhuǎn)換成從VB100開始的10個ASCII碼字符,使用16#A3的格式,用點號作小數(shù)點,后面跟3位小數(shù),程序如表5-20所示。
表5-20 實數(shù)轉(zhuǎn) ASCII碼指令程序
(4)十六進制整數(shù)與 ASCII碼相互轉(zhuǎn)換指令
ASCII碼30~39和41~46與十六進制數(shù)為0~9和 A~F相對應(yīng),使用 HTA 指令可將十六進制整數(shù)轉(zhuǎn)換為 ASCII碼字符串;使用 ATH 指令可將 ASCII碼字符串轉(zhuǎn)換為相應(yīng)的十六進制整數(shù)。
ATH 指令將一個長度為 LEN 從IN 開始的 ASCII碼字符串轉(zhuǎn)換成從 OUT 開始的十六進制整數(shù);HTA 指令將從輸入字節(jié)IN 開始的長度為 LEN 的十六進制整數(shù)轉(zhuǎn)換成從 OUT開始的 ASCII碼字符串。ASCII碼和十六進制數(shù)的有效范圍為0~255。
例5-11 ASCII碼轉(zhuǎn)換成十六進制整數(shù)指令的使用。將 VB100~VB102中存放的3個ASCII碼34、42、38轉(zhuǎn)換成十六進制數(shù)。程序及運行結(jié)果如表5-21所示。表中 “x"為半字節(jié),表示 VB11的低4位值未改變。
表5-21 ASCII碼轉(zhuǎn)換成十六進制整數(shù)指令程序
編碼與譯碼指令
編碼指令 ENCO (Encode)是將輸入的字型數(shù)據(jù)IN 中為1的有效位的位數(shù)寫入輸出字節(jié) OUT 的4位,即用半字節(jié)對一個字型數(shù)據(jù)16位中的 “1"位有效位進行編碼。它的輸入IN 為字型數(shù)據(jù),輸出 OUT 為字節(jié)型數(shù)據(jù),其指令如表5-22所示。
表5-22 編碼指令
譯碼指令 DECO (Decode)是 將 輸 入 的 字 節(jié) 型 數(shù) 據(jù)IN 的 低 4 位 表 示 的 位 號 輸 出 到OUT 所的單元對應(yīng)位置1,而其它位清0。即對半字節(jié)的編碼進行譯碼,以選擇一個字型數(shù)據(jù)16位中的 “1"位。它的輸入IN 為字節(jié)型數(shù)據(jù),輸出 OUT 為字型數(shù)據(jù),其指令如表5-23所示。
表5-23 譯碼指令
例5-12 編碼和譯碼指令的舉例,其程序如表5-24所示。若I0.1常開觸點為 OFF 而I0.0觸點為 ON,執(zhí)行 ENCO 指令進行編碼操作后,VB100中的值為0;執(zhí)行 DECO 指令進行譯碼操作后,VW10中的值也為16#00。若I0.1常開觸點為 ON,I0.0觸點也為 ON時,執(zhí)行 ENCO 指令進行編碼操作后,VB100中的值為3;執(zhí)行 DECO 指令進行譯碼操作后,VW10中的值為16#0008,即二進制數(shù)0000000000001000。
表5-24 編碼和譯碼指令程序
七段顯示譯碼指令
S7-200SMARTPLC七段顯示譯碼指令SEG (Segment)是根據(jù)輸入字節(jié)IN 低4位定的十六進制 數(shù) (16#0~16#F) 產(chǎn) 生 點 亮 七 段 顯 示 器 各 段 的代碼,并 送 到 輸 出 字節(jié)OUT。七段顯示器的abcdefg (D0~D6)段分別對應(yīng)于輸出字節(jié)的第0~6位,若輸出字節(jié)的某位為1時,其對應(yīng)的段顯示;輸出字節(jié)的某位為0時,其對應(yīng)的段不亮。字符顯示與各段的關(guān)系如表5-25所示。例如要顯示數(shù)字 “2"時,D0、D1、D3、D4、D6為1,其余為0。
表5-25 字符顯示與各段關(guān)系
七段顯示譯碼指令如表5-26所示。
表5-26 七段顯示譯碼指令
例5-13 若PLC的I0.0外接按鈕SB0,QB0外接1位LED共陰極數(shù)碼管,要求每按1次按鈕時,共陰極數(shù)碼管顯示的數(shù)字加1,其顯示數(shù)字為0~9。
分析:可以使用 C0增計數(shù)器對按鈕次數(shù)進行統(tǒng)計,再將 C0中的整數(shù)轉(zhuǎn)換為相應(yīng) BCD碼后送入 MB0,最后將 MB0中的數(shù)值轉(zhuǎn)換為相應(yīng)的段碼即可。編寫的程序如表5-27所示。
表5-27 七段顯示譯碼程序