發布日期:2022-04-26 點擊率:18 品牌:西門子_Siemens
ASCII碼與數值轉換指令是將由ASCII碼表示的0-9、A~F的字符串,與十六進制數、整數、雙整數及實數之間進行轉換。
(1) ASCII碼與十六進制數轉換指令
LAD及STL指令格式如圖6-44所示,
1) ASCII碼轉十六進制數(ATH)指令:將從IN指定的地址開始、長度為LEN的ASCII碼字符串轉換為十六進制數,并將結果送到OUT指定的地址開始的字節進行輸出。每一個ASCII碼對應4位十六進制數,ASCII碼字符串的最大長度為255個字符。
2)十六進制數轉ASCII碼(HTA)指令:將從IN指定的地址開始、長度為LEN的十六進制數轉換為ASCII碼字符串,并將結果送到OUT指定的地址開始的字節進行輸出。可轉換的十六進制數的最大個數為255。
在這兩個指令中,有效的ASCII碼字符為十六進制數30~ 39和41—46。指令影響的特殊存儲器標志位是:SMl.7(非法的ASCII碼)。
假設VB30。VB32中存放了3個ASCII碼33(“3”)、45(“E”)和41(“A”),指令“ATH VB30,VB40,3”將它們轉換為16#3E和16#Ax,分別存放在字節VB40和VB41中,“x”表示VB41低4位(半個字節)的數未發生變化。
(2)數值轉為ASCII碼的指令
LAD及STL指令格式如圖6-45所示。
1)整數轉為ASCII碼(ITA)指令:將整數輸入數據IN轉換成ASCII碼字符串,轉換結果存人OUT指定的地址開始的連續8個字節存儲器單元中。ASCII碼字符串始終是8個字節。格式參數( FMT)指明轉換后的擺放格式,FMT的說明如圖646所示。
圖中nnn用于指定輸出緩沖區中小數點右側的位數,nnn的有效范圍為0—5。如果n=0,則顯示整數。nnn >5時,輸出緩沖區會被空格鍵的ASCII碼填充。位c指定用逗號(c=1)或小數點號(c=0)作為整數和小數部分的分隔符。FMT的高4位必須為0。圖6-46中的FMT =3(即nnn= 011),小數部分有3位,使用小數點號(c=0)。
輸出緩沖區按下面的規則進行格式化:
·正數值寫入緩沖區時沒有符號位,負數值寫入緩沖區時以負號(一)開頭。
.小數點左側的開頭的0(除去靠近小數點的之外)被隱藏。
.數值在輸出緩沖區中是右對齊的。
2)雙整數轉為ASCII碼(DTA)指令:將雙字整數輸入數據IN轉換成ASCII碼字符串,轉換結果存入OUT指定的地址開始的連續12個字節存儲器單元中。輸出緩沖區的大小始終為12個字節(B),FMT各位的意義和輸出緩沖區格式化的規則同ITA指令。
3)實數轉為ASCII碼(RTA)指令:將實數輸入數據IN轉換成ASCII碼字符串,轉換結果存人OUT開始的輸出緩沖區中,輸出ASCII碼字符串的位數(長度)就是輸出緩沖區的大小,它的值為3 -15個字節或字符。格式操作數FMT的定義如圖6-47所示,輸出緩沖區的大小由ssss區的值指定,ssss =3—15。輸出緩沖區中小數部分的位數由nnn指定,nnn =0—5。如果n=0,則顯示整數。nnn >5或輸出緩沖區太小以致于無法存儲轉換值時,輸出緩沖區會被空格鍵的ASCII碼填充。位c指定用逗號(c=1)或小數點號(c=0)作為整數和小數部分的分隔符。FMT和OUT均為字節變量。
S7-200 PLC的實數格式支持最多7位小數,若顯示7位以上的小數會產生一個四舍五入的錯誤。
除了ITA指令輸出緩沖區格式化的三條規則外,還有以下規則:
.小數部分的位數如果大于nnn指定的位數,用四舍五入的方法去掉多余的位。
.輸出緩沖區不應小于3個字節,還應大于小數部分的位數。
(3)字符串轉換指令
1)數值轉為字符串的指令:LAD及STL指令格式如圖6-49所示。ITS、DTS和RTS指令分別將整數、雙整數和實數值(IN)轉換為ASCII碼字符串,存放到OUT指定的變量中。
這三條指令的操作和FMT的定義與ASCII碼轉換指令的定義基本相同,兩者的區別在于,字符串轉換指令轉換后得到的字符串的起始字節(即地址OUT所指定的字節)中是字符串的長度。對于整數和雙整數的轉換,起始字節中分別為轉換后字符的個數8和12,實數轉換后字符串的長度由FMT的高4位中的數來決定。
2)子字符串轉為數值的指令:LAD及STL指令格式如圖6-50所示。
S1rI、STD和STR指令分別將從偏移量INDX開始的字符串(IN)轉換為整數、雙整數和實數值,存放到OUT指定的變量中。STI、STD指令將字符串轉換為以下格式的整數:
[空格][+或一][數字0-9]
STR指令將字符串轉換為以下格式的實數:
[空格][+或一][數字0—9][.或,][數字0-9]
INDX通常設置為1,即從字符串的第一個字符開始轉換。如果只需要轉換字符串中后面的數字,可以將INDX設為大于1的數。這可以被用于字符串中包含非數值字符的情況。
例如只轉換字符串“Temperature:77.8”中的數字時,可以設置INDX為13。
子字符串轉為實數( STR)指令不能用于轉換以科學計數法和指數形式表示實數的字符串,例如會將“1. 345E8”轉換為實數值1.345,而且沒有錯誤顯示。
轉換到字符串的結尾或遇到第一個非法的字符(不是數字0~9)時,轉換指令結束,停止轉換。轉換產生的整數值超過有符號字的范圍時,溢出標志位SMl.1將被置位。例如,當輸入字符串產生的數值大于32767或小于- 32768時,字符串轉為整數指令會置位溢出標志。
當輸入字符串中不包含可以轉換的合法數值時,溢出標志位SMl.1也會置位。例如,如果輸入字符串為“A123”,轉換指令會置位SMl.1而且輸出值保持不變。
圖6-51給出了子字符串轉為數值指令的應用示例。
下一篇: PLC、DCS、FCS三大控
上一篇: MATLAB和Simulink在航