200SMART轉換指令解析系列(一)
導讀:
這篇文章為大家介紹200SMART的部分轉換指令,主要是字符串及字符與其它數(shù)據(jù)類型相互轉換的指令,這些指令理解起來有些難度的,雖不常用,但有時在通信交換數(shù)據(jù)時也會用到,很多初學者不知如何利用這些指令來編程,因此,本文就此介紹一下其含義和用法。注意此處說的字符串為ASCII碼字符串。
一、所需軟件及硬件 ?
西門子200SMART編程軟件V2.7版,200SMART ST30 CPU一臺,通信網線一條。
二、轉換指令含義及用法 ?
1.整數(shù)、雙整數(shù)轉換為字符串
因這兩個指令的用法是類似的,因此放在一起介紹。指令的形式及在指令列表中的位置如下圖1所示:
? ? ? ? ?

? ? ? ? ?
實際生產中配方的數(shù)據(jù)已經定好,由圖1可知,改指令有兩個輸入管腳和一個輸出管腳,其中IN為要轉換的整數(shù)字(有符號整數(shù)),可填常數(shù)或變量,如12345或VW10;OUT為輸出字符串緩沖區(qū)的首字節(jié),如VB100;FMT管腳初學者很多都不知其意,故加以詳細說明。FMT即為英文單詞formatd的縮寫,翻譯成中文是“格式”的意思,此處可理解為規(guī)定字符串轉換后的格式。FMT需填寫一個字節(jié)型變量或常數(shù),如VB0或常數(shù)5,下面以圖示的方式介紹其含義,如下圖2:
? ? ? ? ?

? ? ? ? ?
因FMT為以字節(jié)型變量,所以由8個二進制位組成,即0位到7位,LSB代表地位,MSB代表高位。指令規(guī)定,高四位(4-7位)必須為0,C位指定是用逗號還是小數(shù)點來作為轉換后整數(shù)部分和小數(shù)部分的分隔符:當C=1時,使用逗號;當C=0時,使用小數(shù)點。右邊三位nnn的有效數(shù)據(jù)為0到5,代表小數(shù)點后面字符的個數(shù)。nnn=000時,轉換后的值無小數(shù)點;nnn=5時,小數(shù)點右面有5個字符,如輸入的數(shù)據(jù)不在0到5的范圍內,則得不到正確的輸出結果。還需注意的該指令的下列幾條規(guī)定:
1)、轉換值為正寫入輸出緩沖區(qū)不帶時不帶符號,為負則需帶符號(—);
2)、輸出字符串的值為右對齊;
3)、輸出字符串的長度為8位,即8個字節(jié),加上首字節(jié)(自動填寫字符串長度“8”),以共9個字節(jié),需注意該區(qū)域地址不要重復使用。
下面用實際的案例及監(jiān)控加以說明,案例1(輸入管腳用常數(shù))如圖3所示:


圖3上圖的轉換值以ASCII碼的格式顯示,首字節(jié)VB10內的數(shù)據(jù)為字符8,代表輸出字符串的長度為8為,VB16為以點標志的小數(shù)點位,因FMT為2,所以小數(shù)點后面為2位,而輸出字符串規(guī)定為右對齊,所以轉換后的值為字符串56.28,其余的字節(jié)為空格;下圖示意16進制顯示的格式,大家可以對照ASCII表,查看是否與上圖的數(shù)據(jù)一致。
案例2(輸入管腳用變量)如下圖4所示:



? ? ? ? ?
圖4上圖轉換的整數(shù)VW20為32767,VB30為2#0000_1011,高四位為0,3位1,表示小數(shù)點以逗號表示,如圖4上圖的VB105的當前值,后三位為011,表示小數(shù)點后面有3位數(shù),所以轉換后的值為32.767;中圖中將VB30改為2#0000_1000,表示小數(shù)點后沒有數(shù)據(jù),因此監(jiān)控圖顯示轉換后的值為32767;下圖VB30為2#0000_0111,后三位超出0-5的范圍,因此指令報錯。
雙整數(shù)轉換為字符串指令與單整數(shù)轉換指令類似,唯一不同的是輸出字符串的長度為12位,加上首字節(jié)一共是13個字節(jié),比如VB0到VB12。這里不再贅述,大家可以舉一反三進行練習。
? ? ? ? ?
2. 浮點數(shù)轉換為字符串指令
浮點數(shù)數(shù)轉換為字符串的指令會將實數(shù)值 IN 轉換為 ASCII 字符串。格式 (FMT) 分配小數(shù)點右側的轉換精度、小數(shù)點顯示為逗號還是句點以及輸出字符串的長度。轉換結果放置在以 OUT 開頭的字符串中。結果字符串的長度在格式中指定,可以是 3 到 15 個字符。FMT圖示如下圖5所示:
? ? ? ? ?

? ? ? ??
? ? ? ? ?
總結:由圖5可見,“R_S”與“I_S”、“DI_S”的FMT管腳的區(qū)別是高四位有效,字段SSSS的取值范圍是3-15,表示輸出字符串的長度,超出此范圍指令會報錯。低四位代表的含義與“I_S”、“DI_S”的FMT相同。需要注意的是,CPU 使用的實數(shù)格式最多支持 7 位有效數(shù)字,嘗試顯示 7 位以上有效數(shù)字會產生舍入錯誤。請看下面的例子及監(jiān)控畫面,如圖6所示:
? ? ? ? ?

? ? ? ? ?
FMT管腳的VB130的值為16#A4,這就是說轉換值的格式是10個字符,小數(shù)點后有4位,所以VD120的值456.888轉化后為字符串兩個空格加456.8880,共10個字節(jié)。這個指令需謹慎使用,很容易出錯。比如輸入是456.888,VB130輸入16#74,認為能得到結果為456.8880,但指令會報錯,他因為456.8880一共占8個字節(jié),而FMT的值為16#74,只輸出7個字節(jié),因此得不到正確結果,將16#74改為16#84后,輸出結果正確,如下圖7所示。
? ? ? ? ?


因篇幅所限,本文先介紹這三個指令,希望能對大家理解和使用有所幫助。
來源:技成培訓網,作者:技成-何曉剛,未經授權不得轉載!