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