PLC的主要數據類型有字節型、整數型、雙整數型和實數型,數據的編碼類型主要有二進制、十進制、十六進制、BCD碼和ASCII碼等。在編程時,指令對操作數類型有一定的要求,如字節型與字型數據不能直接進行相加運算。為了讓指令能對不同類型數據進行處理,要先對數據的類型進行轉換。 轉換指令是一種轉換不同類型數據的指令。轉換指令可分為標準轉換指令、ASCII碼轉換指令、字符串轉換指令和編碼與解碼指令。
標準轉換指令
標準轉換指令可分為數字轉換指令、四舍五入取整指令和段譯碼指令。
1.數字轉換指令
數字轉換指令有字節與整數間的轉換指令、整數與雙整數間的轉換指令、BCD碼與整數間的轉換指令和雙整數轉實數指令。 BCD碼是一種用4位二進制數組合來表示十進制數的編碼。BCD碼的0000~1001分別對應十進制數的0~9。一位十進制數的二進制編碼和BCD碼是相同的,例如6的二進制編碼為0110,BCD碼也為0110;但多位十進制數兩種編碼是不同的,例如64的8位二進制編碼為0100 0000,BCD碼則為0110 0100。由于BCD碼采用4位二進制數來表示1位十進制數,故16位BCD碼能表示十進制數的范圍是0000~9999。
1)指令說明
數字轉換指令說明如表6-29所示。
表6-29 數字轉換指令說明
2)指令使用舉例
數字轉換指令的使用如圖6-14所示,當I0.0觸點閉合時,執行I_DI指令,將C10中的整數轉換成雙整數,然后存入AC1中。當I0.1觸點閉合時,執行BCD_I指令,將AC0中的BCD碼轉換成整數。例如,指令執行前AC0中的BCD碼為0000 0001 0010 0110(即126),執行BCD_I指令后,AC0中的BCD碼被轉換成整數0000000001111110。
圖6-14 數字轉換指令的使用
2.四舍五入取整指令
1)指令說明
四舍五入取整指令說明如表6-30所示。
表6-30 四舍五入取整指令說明
2)指令使用舉例
四舍五入取整指令的使用如圖6-15所示,當I0.0觸點閉合時,執行ROUND指令,將VD8中的實數采用四舍五入取整的方式轉換成雙整數,然后存入VD12中。
圖6-15 四舍五入取整指令的使用
3.段譯碼指令
段譯碼指令的功能是將IN端指定單元中的低4位數轉換成能驅動七段數碼顯示器顯示相應字符的七段碼。
1)七段數碼顯示器與七段碼
七段數碼顯示器是一種采用七段發光體來顯示十進制數0~9的顯示裝置,其結構和外形如圖6-16所示。當某段加有高電平“1”時,該段發光。例如,要顯示十進制數“5”,可讓gfedcba=1101101,這里的1101101為七段碼,七段碼只有七位,通常在最高位補0組成8位(一個字節)。段譯碼指令IN端指定單元中的低4位實際上是十進制數的二進制編碼值,經指令轉換后變成七段碼存入OUT端指定的單元中。十進制數、二進制數、七段碼及顯示字符的對應關系見表6-31。
圖6-16 七段數碼顯示器
表6-31 十進制數、二進制數、七段碼及顯示字符的對應關系
2)指令說明
段譯碼指令說明如表6-32所示。
表6-32 段譯碼指令說明
3)指令使用舉例
圖6-17 段譯碼指令的使用
段譯碼指令的使用如圖6-17所示,當I0.0觸點閉合時,執行SEG指令,將VB40中的低4位數轉換成七段碼,然后存入AC0中。例如,VB40中的數據為00000110,執行SEG指令后,低4位0110轉換成七段碼01111101,存入AC0中。
ASCII碼轉換指令
ASCII碼轉換指令包括整數、雙整數、實數轉ASCII碼指令和十六進制數與ASCII碼轉換指令。
1.關于ASCII碼知識 ASCII碼意為美國標準信息交換碼,是一種使用7位或8位二進制數編碼的方案,最多可以對256個字符(包括字母、數字、標點符號、控制字符及其他符號)進行編碼。ASCII編碼表見表6-33。計算機等很多數字設備的字符采用ASCII編碼方式,例如,當按下鍵盤上的“8”鍵時,鍵盤盤內的編碼電路就將該鍵編碼成011 1000,再送入計算機處理。如果在7位ASCII碼最高位加0就是8位ASCII碼。
表6-33 ASCII編碼表
2.整數轉ASCII碼指令
1)指令說明
整數轉ASCII碼指令說明如表6-34所示。
表6-34 整數轉ASCII碼指令說明
在ITA指令中,IN端為整數型操作數,FMT端指定字節單元中的數據用來定義ASCII碼字符串在OUT存儲區的存放格式,OUT存儲區是指OUT端指定首地址的8個連續字節單元,又稱輸出存儲區。FMT端單元中的數據定義如下。
2)指令使用舉例
整數轉ASCII碼指令的使用如圖6-18所示,當I0.0觸點閉合時,執行ITA指令,將IN端VW10中的整數轉換成ASCII碼字符串,保存在OUT端指定首地址的8個連續單元(VB12~VB19)構成的存儲區中,ASCII碼字符串在存儲區的存放形式由FMT端VB0單元中的數據低4位規定。
圖6-18 整數轉ASCII碼指令的使用
例如,VW10中整數為12,VB0中的數據為3(即00000011),執行ITA指令后,VB12~VB19單元中存儲的ASCII碼字符串為“0.012”,各單元具體存儲的ASCII碼見表6-35,其中VB19單元存儲“2”的ASCII碼“00110010”。
輸出存儲區的ASCII碼字符串格式有以下規律:
①正數值寫入輸出存儲區時沒有符號位。
②負數值寫入輸出存儲區時以負號(-)開頭。
③除小數點左側最靠近的0外,其他左側0去掉。
④輸出存儲區中的數值是右對齊的。
表6-35 FMT單元取不同值時存儲區中ASCII碼的存儲形式
3.雙整數轉ASCII碼指令
1)指令說明
雙整數轉ASCII碼指令說明如表6-36所示。
表6-36 雙整數轉ASCII碼指令說明
在DTA指令中,IN端為雙整數型操作數,FMT端字節單元中的數據用來指定ASCII碼字符串在OUT存儲區的存放格式,OUT存儲區是指OUT端指定首地址的12個連續字節單元。FMT端單元中的數據定義與整數轉ASCII碼指令相同。
2)指令使用舉例
雙整數轉ASCII碼指令的使用如圖6-19所示,當I0.0觸點閉合時,執行DTA指令,將IN端VD10中的雙整數轉換成ASCII碼字符串,保存在OUT端指定首地址的8個連續單元(VB14~VB21)構成的存儲區中,ASCII碼字符串在存儲區的存放形式由VB0單元(FMT端指定)中的低4位數據規定。
圖6-19 雙整數轉ASCII碼指令的使用
例如,VD10中雙整數為3456789,VB0中的數據為3(即00000011),執行DTA指令后,VB14~VB21中存儲的ASCII碼字符串為“3456.789”。
輸出存儲區的ASCII碼字符串格式有以下規律。
①正數值寫入輸出存儲區時沒有符號位。
②負數值寫入輸出存儲區時以負號(-)開頭。
③除小數點左側最靠近的0外,其他左側0去掉。
④輸出存儲區中的數值是右對齊的。
4.實數轉ASCII碼指令
1)指令說明
實數轉ASCII碼指令說明如表6-37所示。
表6-37 實數轉ASCII碼指令說明
在RTA指令中,IN端為實數型操作數,FMT端指定單元中的數據用來定義OUT存儲區的長度和ASCII碼字符串在OUT存儲區的存放形式。FMT端單元中的數據定義如下。
2)指令使用舉例
實數轉ASCII碼指令的使用如圖6-20所示,當I0.0觸點閉合時,執行RTA指令,將IN端VD10中的實數轉換成ASCII碼字符串,保存在OUT端指定首地址的存儲區中,存儲區的長度由FMT端VB0單元中的數據高4位規定,ASCII碼字符串在存儲區的存放形式由FMT端VB0單元中的低4位數據規定。
圖6-20 實數轉ASCII碼指令的使用
例如,VD10中實數為1234.5,VB0中的數據為97(即01100001),執行RTA指指令后,VB14~VB19中存儲的ASCII碼字符串為“1234.5”。FMT單元取不同值時存儲區中ASCII碼的存儲格式見表6-38。
表6-38 FMT單元取不同值時存儲區中ASCII碼的存儲格式
輸出存儲區的ASCII碼字符串格式有以下規律。正數值寫入輸出存儲區時沒有符號位。負數值寫入輸出存儲區時以負號(-)開頭。除小數點左側最靠近的0外,其他左側0去掉。若小數點右側數據超過規定位數,會按四舍五入去掉低位以滿足位數要求。輸出存儲區的大小應至少比小數點右側的數字位數多3字節。輸出存儲區中的數值是右對齊的。
5.ASCII碼轉十六進制數指令
1)指令說明
ASCII碼轉十六進制數指令說明如表6-39所示。
表6-39 ASCII碼轉十六進制數指令說明
2)指令使用舉例
ASCII碼轉十六進制數指令的使用如圖6-21所示,當I1.0觸點閉合時,執行ATH指令,將IN端VB30為首地址的連續3個(LEN端指定)字節單元(VB30~VB32)中的ASCII碼字符串轉換成十六進制數,保存在OUT端VB40為首地址的連續字節單元中。
圖6-21 ASCII碼轉十六進制數指令的使用
例如,VB30、VB31、VB32單元中的ASCII碼字符分別是3(00110011)、E(01000101)、A(01000001),執行ATH指令后,VB30~VB32中的ASCII碼轉換成十六進制數,并存入VB40、VB41單元,其中VB40存放十六進制數3E(即00111110),VB41存放Ax(即1010xxxx),x表示VB41原先的數值不變。
6.十六進制數轉ASCII碼指令
1)指令說明
十六進制數轉ASCII碼指令說明如表6-40所示。
表6-40 十六進制數轉ASCII碼指令說明
2)指令使用舉例
十六進制數轉ASCII碼指令的使用如圖6-22所示,當I1.0觸點閉合時,執行HTA指令,將IN端VB30為首地址的連續2個(LEN端指定)字節單元(VB30、VB31)中的十六進制數轉換成ASCII碼字符,保存在OUT端VB40為首地址的連續字節單元中。
例如,VB30、VB31單元中的十六進制數分別是3E(0011 1110)、1A(00011010),執行HTA指令后,VB30、VB31中的十六進制數轉換成ASCII碼,并存入VB40~VB43單元中,其中VB40存放3的ASCII碼(00110011),VB41存放E的ASCII碼,VB42存放1的ASCII碼,VB43存放A的ASCII碼。
在ATH、HTA指令中,有效的ASCII碼字符為0~9、A~F,用二進制數表示為00110011~00111001、01000001~01000110,用十六進制數表示為33~39、41~46。另外,ATH、HTA指令可轉換的ASCII碼和十六進制數的最大個數為255個。
圖6-22 十六進制數轉ASCII碼指令的使用
字符串轉換指令
字符串轉換指令包括整數、雙整數、實數轉字符串指令和字符串轉整數、雙整數、實數指令。
1. 整數、雙整數、實數轉字符串指令
1)指令說明
整數、雙整數、實數轉字符串指令說明如表6-41所示。
表6-41 整數、雙整數、實數轉字符串指令說明
整數、雙整數、實數轉字符串指令中FMT的定義與整數、雙整數、實數轉ASCII碼指令基本相同,兩者的區別在于:字符串轉換指令中OUT端指定的首地址單元用來存放字符串的長度,其后單元才存入轉換后的字符串。對于整數、雙整數轉字符串指令,OUT首地址單元的字符串長度值分別固定為8、12;對于實數轉字符串指令,OUT首地址單元的字符串長度值由FMT的高4位來決定。
2)指令使用舉例
圖6-23為實數轉字符串指令的使用,當I0.0觸點閉合時,執行R_S指令,將IN端VD10中的實數轉換成ASCII碼字符串,保存在OUT端指定首地址的存儲區中,存儲區的長度由FMT端VB0單元中的數據高4位規定,ASCII碼字符串在存儲區的存放形式由FMT端VB0單元中的低4位數據規定。
圖6-23 實數轉字符串指令的使用
例如,VD10中實數為1234.5,VB0中的數據為97(即01100001),執行R_S指令后,VB14~VB20中存儲的ASCII碼字符串為“61234.5”。FMT單元取不同值時存儲區中ASCII碼字符串的存儲形式見表6-42。
表6-42 FMT單元取不同值時存儲區中ASCII碼字符串的存儲形式
整數、雙整數、實數轉字符串指令中的輸出存儲區存放ASCII碼字符串格式與整數、雙整數、實數轉ASCII碼指令基本相同,主要區別在于前者的輸出存儲區首地址單元存放字符串長度,其后才存入字符串。
2. 字符串轉整數、雙整數、實數指令
1)指令說明
字符串轉整數、雙整數、實數指令說明如表6-43所示。
在字符串轉整數、雙整數、實數指令中,INDX端用于設置開始轉換單元相對首地址的偏移量,通常設置為1,即從首地址單元中的字符串開始轉換。INDX也可以被設置為其他值,可以用于避開轉換非法字符(非0~9的字符)。例如,IN端指定首地址為VB10,VB10~VB17單元存儲的字符串為“Key:1236”,如果將INDX設為5,則轉換從VB14單元開始,VB10~VB13單元中的字符串“Key”不會被轉換。
表6-43 字符串轉整數、雙整數、實數指令說明
字符串轉實數指令不能用于轉換以科學計數法或者指數形式表示實數的字符串,強行轉換時,指令不會產生溢出錯誤(SM1.1=1),但會轉換指數之前的字符串,然后停止轉換。例如,轉換字符串“1.234E6”時,轉換后的實數值為1.234,并且沒有錯誤提示。
指令在轉換時,當到達字符串的結尾或者遇到第一個非法字符時,轉換指令結束。當轉換產生的整數值過大以致輸出值無法表示時,溢出標志(SM1.1)會置位。
2)指令使用舉例
字符串轉整數、雙整數、實數指令的使用如圖6-24所示,當I0.0觸點閉合時,依次執行S_I、S_DI、S_R指令。S_I指令將相對VB0偏移量為7的VB6及后續單元中的字符串轉換成整數,并保存在VW100單元中;S_DI指令將相對VB0偏移量為7的VB7及后續單元中的字符串轉換成雙整數,并保存在VD200單元中;S_R指令將相對VB0偏移量為7的VB7及后續單元中的字符串轉換成實數,并保存在VD300單元中。
圖6-24 字符串轉整數、雙整數、實數指令的使用
如果VB0~VB11單元中存儲的ASCII碼字符串為 “11、T、e、m、p、空格、空格、9、8、.、6、F”,執行S_I、S_DI、S_R指令后,則在VW100單元中得到整數98,在VD200單元中得到雙整數98,在VD300單元中得到實數98.6。
編碼與解碼指令
1.指令說明
編碼與解碼指令說明如表6-44所示。
表6-44 編碼與解碼指令說明
2.指令使用舉例
編碼與解碼指令的使用如圖6-25所示,當I0.0觸點閉合時,執行ENCO和DECO指令,在執行ENCO(編碼)指令時,將AC3中最低有效位1的位號“9”寫入VB50單元的低4位;在執行DECO指令時,根據AC2中低半字節表示的位號“3”將VW40中的第3位置1,其他位全部清0。
圖6-25 編碼與解碼指令的使用
審核編輯:湯梓紅
-
plc
+關注
關注
4984文章
12414瀏覽量
456121 -
二進制
+關注
關注
2文章
719瀏覽量
41317 -
指令
+關注
關注
1文章
580瀏覽量
35414 -
ASCII
+關注
關注
4文章
169瀏覽量
34690
原文標題:舉例子詳解:PLC轉換指令
文章出處:【微信號:中泰PLC自動化教學,微信公眾號:中泰PLC自動化教學】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論