學習PLC編程過程中不可避免會接觸到數(shù)據(jù)運算、比較等操作,當兩個操作數(shù)類型不同時就需要進行轉(zhuǎn)換,所以數(shù)據(jù)轉(zhuǎn)換指令也是編程的重要指令。但是很多人往往不是太了解ASCII字符及字符與數(shù)據(jù)之間如何轉(zhuǎn)換,本文就著重介紹字符與數(shù)據(jù)之間如何進行轉(zhuǎn)換。
有些設備在通信過程中發(fā)送的報文是ASCII形式,那么就需要將其轉(zhuǎn)換成數(shù)據(jù)。
一、名詞認識
1. ASCII字符字符是指計算機中使用的字母、數(shù)字、字和符號,包括:1、2、3、A、B、C、~!·#¥%……—*()——+等等。在ASCII編碼中,一個英文字母字符存儲需要1個字節(jié)
2.字符串
字符串變量是一個字符序列,其中的每個字符均以字節(jié)形式存儲。STRING數(shù)據(jù)類型的第一個字節(jié)定義字符串的長度,即字符字節(jié)數(shù)。
下圖所示為存儲器中以變量形式存儲的STRING數(shù)據(jù)類型。字符串的長度可以是0到254個字符。變量字符串的最大存儲要求為255個字節(jié)(長度字節(jié)加上254個字符)。
如果直接在程序編輯器中輸入常數(shù)字符串參數(shù)(最多126個字符),或在數(shù)據(jù)塊編輯器中初始化變量字符串(最多254個字符),則字符串賦值必須以雙引號字符開始和結(jié)束。
3.字符組
ASCII字符數(shù)組指令的字符輸入輸出采用BYTE數(shù)據(jù)類型。ASCII字符數(shù)組為被引用的字節(jié)地址序列,與字符串類似,只是沒有指定長度。由于未使用長度字節(jié),因此該數(shù)組并不是STRING數(shù)據(jù)類型??墒褂肁SCII字符串指令處理STRING數(shù)據(jù)類型的變量。
二、字符轉(zhuǎn)換指令類型
1)整數(shù)轉(zhuǎn)字符串(I_S):將整數(shù)字IN轉(zhuǎn)換為長度為8個字符的ASCII字符串。
格式(FMT)分配小數(shù)點右側(cè)的轉(zhuǎn)換精度,并指定小數(shù)點顯示為逗號還是句點。結(jié)果字符串會寫入從OUT處開始的9個連續(xù)字節(jié)中。
nnn表示小數(shù)點右側(cè)的位數(shù),可設置為0-5。c位指定使用逗號(c=1),使用小數(shù)點(c=0)作為整數(shù)部分與小數(shù)部分之間的分隔符。
下圖還給出了值的示例,其格式為:使用小數(shù)點(c = 0),小數(shù)點右側(cè)有三位數(shù)(nnn=011)。OUT處的值為下一字節(jié)地址中存儲的字符串的長度。
2)雙整數(shù)轉(zhuǎn)字符串(DI_S)
雙整數(shù)轉(zhuǎn)換為字符串的指令會將雙整數(shù)IN 轉(zhuǎn)換為長度為12個字符的ASCII字符串。格式(FMT) 分配小數(shù)點右側(cè)的轉(zhuǎn)換精度,并指定小數(shù)點顯示為逗號還是句點。結(jié)果字符串會寫入從OUT處開始的13個連續(xù)字節(jié)中。
輸出字符串的長度始終為12個字符。輸出緩沖區(qū)中小數(shù)點右側(cè)的位數(shù)由nnn字段指定。nnn字段的有效范圍是0到5。如果分配0位數(shù)到小數(shù)點右側(cè),則該值不顯示小數(shù)點。對于nnn大于5的值,輸出為12個ASCII空格字符組成的字符串。c位指定使用逗號(c=1)還是小數(shù)點(c=0)作為整數(shù)與小數(shù)部分之間的分隔符。格式的高4位必須是零。
下圖還給出了一個值的示例,其格式為:使用小數(shù)點(c = 0),小數(shù)點右側(cè)有四位數(shù)(nnn=100)。OUT處的值為下一字節(jié)地址中存儲的字符串的長度。
3)浮點數(shù)轉(zhuǎn)字符串(R_S)
實數(shù)轉(zhuǎn)換為字符串的指令會將實數(shù)值IN轉(zhuǎn)換為ASCII字符串。格式(FMT)分配小數(shù)點右側(cè)的轉(zhuǎn)換精度、小數(shù)點顯示為逗號還是點以及輸出字符串的長度。轉(zhuǎn)換結(jié)果放置在以OUT開頭的字符串中。結(jié)果字符串的長度在格式中指定,可以是3到15個字符。
CPU使用的實數(shù)格式最多支持7位有效數(shù)字。嘗試顯示7位以上有效數(shù)字會產(chǎn)生舍入錯誤。輸出字符串的長度由ssss字段指定。0、1或2個字節(jié)大小無效。輸出緩沖區(qū)中小數(shù)點右側(cè)的位數(shù)由nnn字段分配。nnn字段的有效范圍是0到5。如果分配0位數(shù)到小數(shù)點右側(cè),則該值不顯示小數(shù)點。如果nnn大于5,或者因分配的輸出字符串長度太小而無法存儲轉(zhuǎn)換的值,則會用ASCII空格字符填充輸出字符串。c位指定使用逗號(c=1)還是小數(shù)點(c=0)作為整數(shù)與小數(shù)部分之間的分隔符。
下圖還給出了一個值的示例,其格式為:小數(shù)點(c = 0),小數(shù)點右側(cè)有一位數(shù)(nnn = 001),輸出字符串的長度為6個字符(ssss=0110)。OUT處的值為下一字節(jié)地址中存儲的字符串的長度。
4)字符串轉(zhuǎn)整數(shù)(S_I)
INDX 轉(zhuǎn)換的起始字符參數(shù),INDX值通常設為1,從字符串的第一個字符開始轉(zhuǎn)換。INDX值可設置為其它值,以在字符串中的不同點處開始轉(zhuǎn)換。當輸入字符串包含不屬于要轉(zhuǎn)換的數(shù)字一部分的文本時,可采用此方法,遇到不可轉(zhuǎn)換的將自動終止。例如,如果輸入字符串為“Temperature:77.8”,可將INDX設置為13來跳過字符串開頭的單詞“Temperature:”轉(zhuǎn)換結(jié)果77。
如果INDX為1,則IN輸入字符串“12345”轉(zhuǎn)換成12345。如果INDX為2,則轉(zhuǎn)換為2345
5)字符串轉(zhuǎn)雙整數(shù)(S_DI):與S_I類似,此處不復述。
6)字符串轉(zhuǎn)浮點數(shù)(S_R)
將字符串轉(zhuǎn)換為實數(shù)的指令不會轉(zhuǎn)換以科學記數(shù)法或指數(shù)形式表示實數(shù)的字符串。該指令不會產(chǎn)生溢出錯誤(SM1.1),但會將字符串轉(zhuǎn)換為指數(shù)之前的實數(shù),然后終止轉(zhuǎn)換。例如,字符串“1.234E6”會轉(zhuǎn)換為實數(shù)值1.234,而不會出現(xiàn)錯誤。
7)整數(shù)轉(zhuǎn)ASCII字符組(ITA)
將整數(shù)值IN轉(zhuǎn)換為ASCII字符數(shù)組。格式參數(shù)FMT將分配小數(shù)點右側(cè)的轉(zhuǎn)換精度,并指定小數(shù)點顯示為逗號還是句點。得出的轉(zhuǎn)換結(jié)果將存入以OUT 分配的地址開始的8個連續(xù)字節(jié)中。
8)雙整數(shù)轉(zhuǎn)ASCII字符組(DTA)
將雙字IN轉(zhuǎn)換為ASCII字符數(shù)組。格式參數(shù)FMT指定小數(shù)點右側(cè)的轉(zhuǎn)換精度。得出的轉(zhuǎn)換結(jié)果將存入以OUT開頭的12個連續(xù)字節(jié)中。
輸出緩沖區(qū)的大小始終為12個字節(jié)。輸出緩沖區(qū)中小數(shù)點右側(cè)的位數(shù)由nnn字段分配。nnn字段的有效范圍是0到5。如果分配0位數(shù)到小數(shù)點右側(cè),則轉(zhuǎn)換后的值無小數(shù)點。對于nnn值大于5的情況,將使用ASCII空格字符填充輸出緩沖區(qū)。c位指定使用逗號(c=1)還是小數(shù)點(c=0)作為整數(shù)部分與小數(shù)部分之間的分隔符。4個最高有效位必須始終為零。
9)浮點數(shù)轉(zhuǎn)ASCII字符組(RTA)
將實數(shù)值IN轉(zhuǎn)換成ASCII字符。格式參數(shù)FMT指定小數(shù)點右側(cè)的轉(zhuǎn)換精度、小數(shù)點顯示為逗號還是點以及輸出緩沖區(qū)大小。得出的轉(zhuǎn)換結(jié)果會存入以OUT開頭的輸出緩沖區(qū)中。
得出的ASCII字符數(shù)(或長度)就是輸出緩沖區(qū)的大小,它的值在3到15個字節(jié)或字符之間。實數(shù)格式最多支持7位有效數(shù)字。嘗試顯示7位以上的有效數(shù)字將導致舍入錯誤。
下圖顯示了RTA指令的格式操作數(shù)(FMT)。通過ssss字段分配輸出緩沖區(qū)的大小。0、1或2個字節(jié)大小無效。輸出緩沖區(qū)中小數(shù)點右側(cè)的位數(shù)由nnn字段分配。nnn字段的有效范圍是0到5。如果分配0位數(shù)到小數(shù)點右側(cè),則轉(zhuǎn)換后的值無小數(shù)點。如果nnn的值大于5或者分配的輸出緩沖區(qū)太小以致無法存儲轉(zhuǎn)換后的值,則使用ASCII空格填充輸出緩沖區(qū)。c位指定使用逗號(c=1)還是小數(shù)點(c=0)作為整數(shù)部分與小數(shù)部分之間的分隔符。
下圖給出了一個數(shù)值作為示例,其格式為使用小數(shù)點(c=0)、小數(shù)點右側(cè)有一位(nnn=100)、緩沖區(qū)的大小為六個字節(jié)(ssss=0111)。
10)十六進制數(shù)轉(zhuǎn)ASCII(HTA)
將從輸入字節(jié)IN開始的十六進制數(shù)轉(zhuǎn)換為從OUT開始的ASCII字符。由長度LEN分配要轉(zhuǎn)換的十六進制數(shù)的位數(shù)。可以轉(zhuǎn)換的ASCII字符或十六進制數(shù)的最大數(shù)目為255。
上圖vb20=16#4E,vb21=16#2D,轉(zhuǎn)換后VB30,VB31,VB32,VB33分別為‘4’‘E’‘2’‘D’。
11)ASCII轉(zhuǎn)十六進制數(shù)(ATH)
將從IN開始,LEN個長度的 ASCII字符轉(zhuǎn)換為從OUT開始的十六進制數(shù)??赊D(zhuǎn)換的最大ASCII字符數(shù)為255個字符。
如果VB0,VB1,VB2,VB3為‘3’,‘5’,‘8’,‘6’則轉(zhuǎn)換
后VB10=16#35,VB11=16#86。
-
plc
+關(guān)注
關(guān)注
5006文章
13107瀏覽量
461455 -
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
6808瀏覽量
88743 -
指令
+關(guān)注
關(guān)注
1文章
606瀏覽量
35617
原文標題:PLC中字符與數(shù)據(jù)之間如何轉(zhuǎn)換
文章出處:【微信號:GKB1508,微信公眾號:工控幫】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論