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