BCD碼(Binary-Coded Decimal?6?0)是二進(jìn)制編碼的十進(jìn)制數(shù)的縮寫,BCD碼用4位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù)。BCD碼各位的數(shù)值范圍為2#0000~2#1001,對應(yīng)于十進(jìn)制數(shù)0~9。BCD碼不能使用十六進(jìn)制的A~F(2#1010~2#1111)這6個(gè)數(shù)字。BCD碼本質(zhì)上是十進(jìn)制數(shù),因此相鄰兩位逢十進(jìn)一。
BCD碼的最高位二進(jìn)制數(shù)是符號(hào)位,負(fù)數(shù)的符號(hào)位為1,正數(shù)為0。16位BCD碼的范圍為–999~+999。
下圖的撥碼開關(guān)將顯示的數(shù)字轉(zhuǎn)換為4位二進(jìn)制數(shù)。PLC用12個(gè)數(shù)字量輸入點(diǎn)讀取的是3位BCD碼,它的值為2#1000 0010 1001,即十六進(jìn)制數(shù)16#829。
BCD碼沒有單獨(dú)的表示方法,而是借用了十六進(jìn)制的表示方法,因此二者很容易混淆。
下圖是S7-300/400的BCD碼和整數(shù)的相互轉(zhuǎn)換指令,可以看到在指令中BCD碼均用十六進(jìn)制的形式表示。
在程序中,怎么知道一個(gè)數(shù)字是BCD碼還是十六進(jìn)制數(shù)呢?
1)看數(shù)據(jù)的來源和用途。BCD碼一般用于輸入和輸出,例如來自撥碼開關(guān)的數(shù)據(jù)是BCD碼,送給顯示電梯樓層的譯碼器芯片的是BCD碼。
2)看手冊的規(guī)定,例如數(shù)據(jù)類型DATE_AND_TIME中的日期和時(shí)間值是BCD碼,計(jì)數(shù)器的預(yù)設(shè)值PV和當(dāng)前計(jì)數(shù)值CV_BCD為BCD碼。
怎樣監(jiān)視BCD碼?
在變量表和程序狀態(tài)監(jiān)控中,用十六進(jìn)制格式監(jiān)視BCD碼。
怎樣輸入BCD碼?
從上圖可以看出,BCD碼用十六進(jìn)制格式輸入,其最高位(符號(hào)位)為16#F(2#1111)。BCD碼的低3位各位只能是0~9,如果是16#A~16#F則會(huì)出錯(cuò)。
計(jì)數(shù)器的預(yù)設(shè)值PV是0~999的BCD碼,可以用格式為C#的常數(shù)(C#1~C#999)作為計(jì)數(shù)器的預(yù)設(shè)值。
下圖用MW42提供計(jì)數(shù)器的預(yù)設(shè)值PV,如果用MOVE指令將十進(jìn)制數(shù)348(對應(yīng)的十六進(jìn)制數(shù)為16#15C)傳送給MW42,進(jìn)入RUN模式時(shí),操作系統(tǒng)將它轉(zhuǎn)換為BCD碼時(shí)出錯(cuò)(16#15C不是BCD碼),不能切換到RUN模式。
輸入預(yù)設(shè)值348時(shí),應(yīng)改為將C#348傳送給MW42,它會(huì)自動(dòng)地變?yōu)閃#16#348,當(dāng)然也可以直接輸入16#348。沒有必要用I_BCD指令將348轉(zhuǎn)換為BCD碼W#16#348后,再傳送給MW42。
在看手冊時(shí)說BCD碼和16進(jìn)制都可以用16#表示如果現(xiàn)在裝載一個(gè)數(shù)<BR> L 16#296 如果是BCD碼表示十進(jìn)制296<BR> 如果是十六進(jìn)制表示十進(jìn)制663<BR> 系統(tǒng)是怎樣區(qū)分那個(gè)數(shù)是BCD碼還是十六進(jìn)制的。
1. BCD 碼是用2進(jìn)制表示的十進(jìn)制數(shù),如果從最右端每4位轉(zhuǎn)換成16進(jìn)制數(shù),則BCD 碼也可以表示成16進(jìn)制,例如:
16#123 , 轉(zhuǎn)換成二進(jìn)制應(yīng)該是 2#0000 0001 0010 0011
2. 系統(tǒng)是怎樣區(qū)分那個(gè)數(shù)是BCD碼還是十六進(jìn)制的。
這取決于使用的指令。例如: STEP7 中S5 定時(shí)器中的設(shè)定值,就是BCD數(shù),而不是16進(jìn)制數(shù)。
指令的規(guī)定與設(shè)計(jì)在最初一旦被定下來之后,就不能再修改。例如同樣是定時(shí)器, 在GE 90-30 的PLC 中,它的設(shè)定值就是10進(jìn)制數(shù),而不是16進(jìn)制數(shù)。
3 . 在每一個(gè)指令中都有使用的數(shù)據(jù)類型的規(guī)定。在那里,你就知道該使用16進(jìn)制數(shù)還是BCD碼了, 先列表如下:
WORD 可以是2進(jìn)制數(shù),或者16進(jìn)制數(shù),或者BCD碼。
DWORD 可以是2進(jìn)制數(shù),或者16進(jìn)制數(shù),或者10進(jìn)制數(shù)。
然而,
INT , DINT 只能是10進(jìn)制數(shù)或者16進(jìn)制數(shù)。
參考出處:
STEP7 中的幫助,在索引項(xiàng)的"輸入要查找的關(guān)鍵字"中輸入: INT
PLC本身是不用區(qū)分的,我覺得在通訊的時(shí)候比較有用到;比如上位機(jī)采集200的時(shí)間的時(shí)候,200提供的是BCD碼的時(shí)間;而上位機(jī)跟200對時(shí)的時(shí)候也需要給200BCD碼的時(shí)間。主要還是編程的時(shí)候,處于省時(shí)省力的考慮吧。
BCD碼的最高位二進(jìn)制數(shù)是符號(hào)位,負(fù)數(shù)的符號(hào)位為1,正數(shù)為0。16位BCD碼的范圍為–999~+999。
下圖的撥碼開關(guān)將顯示的數(shù)字轉(zhuǎn)換為4位二進(jìn)制數(shù)。PLC用12個(gè)數(shù)字量輸入點(diǎn)讀取的是3位BCD碼,它的值為2#1000 0010 1001,即十六進(jìn)制數(shù)16#829。
BCD碼沒有單獨(dú)的表示方法,而是借用了十六進(jìn)制的表示方法,因此二者很容易混淆。
下圖是S7-300/400的BCD碼和整數(shù)的相互轉(zhuǎn)換指令,可以看到在指令中BCD碼均用十六進(jìn)制的形式表示。
在程序中,怎么知道一個(gè)數(shù)字是BCD碼還是十六進(jìn)制數(shù)呢?
1)看數(shù)據(jù)的來源和用途。BCD碼一般用于輸入和輸出,例如來自撥碼開關(guān)的數(shù)據(jù)是BCD碼,送給顯示電梯樓層的譯碼器芯片的是BCD碼。
2)看手冊的規(guī)定,例如數(shù)據(jù)類型DATE_AND_TIME中的日期和時(shí)間值是BCD碼,計(jì)數(shù)器的預(yù)設(shè)值PV和當(dāng)前計(jì)數(shù)值CV_BCD為BCD碼。
怎樣監(jiān)視BCD碼?
在變量表和程序狀態(tài)監(jiān)控中,用十六進(jìn)制格式監(jiān)視BCD碼。
怎樣輸入BCD碼?
從上圖可以看出,BCD碼用十六進(jìn)制格式輸入,其最高位(符號(hào)位)為16#F(2#1111)。BCD碼的低3位各位只能是0~9,如果是16#A~16#F則會(huì)出錯(cuò)。
計(jì)數(shù)器的預(yù)設(shè)值PV是0~999的BCD碼,可以用格式為C#的常數(shù)(C#1~C#999)作為計(jì)數(shù)器的預(yù)設(shè)值。
下圖用MW42提供計(jì)數(shù)器的預(yù)設(shè)值PV,如果用MOVE指令將十進(jìn)制數(shù)348(對應(yīng)的十六進(jìn)制數(shù)為16#15C)傳送給MW42,進(jìn)入RUN模式時(shí),操作系統(tǒng)將它轉(zhuǎn)換為BCD碼時(shí)出錯(cuò)(16#15C不是BCD碼),不能切換到RUN模式。
輸入預(yù)設(shè)值348時(shí),應(yīng)改為將C#348傳送給MW42,它會(huì)自動(dòng)地變?yōu)閃#16#348,當(dāng)然也可以直接輸入16#348。沒有必要用I_BCD指令將348轉(zhuǎn)換為BCD碼W#16#348后,再傳送給MW42。
在看手冊時(shí)說BCD碼和16進(jìn)制都可以用16#表示如果現(xiàn)在裝載一個(gè)數(shù)<BR> L 16#296 如果是BCD碼表示十進(jìn)制296<BR> 如果是十六進(jìn)制表示十進(jìn)制663<BR> 系統(tǒng)是怎樣區(qū)分那個(gè)數(shù)是BCD碼還是十六進(jìn)制的。
1. BCD 碼是用2進(jìn)制表示的十進(jìn)制數(shù),如果從最右端每4位轉(zhuǎn)換成16進(jìn)制數(shù),則BCD 碼也可以表示成16進(jìn)制,例如:
16#123 , 轉(zhuǎn)換成二進(jìn)制應(yīng)該是 2#0000 0001 0010 0011
2. 系統(tǒng)是怎樣區(qū)分那個(gè)數(shù)是BCD碼還是十六進(jìn)制的。
這取決于使用的指令。例如: STEP7 中S5 定時(shí)器中的設(shè)定值,就是BCD數(shù),而不是16進(jìn)制數(shù)。
指令的規(guī)定與設(shè)計(jì)在最初一旦被定下來之后,就不能再修改。例如同樣是定時(shí)器, 在GE 90-30 的PLC 中,它的設(shè)定值就是10進(jìn)制數(shù),而不是16進(jìn)制數(shù)。
3 . 在每一個(gè)指令中都有使用的數(shù)據(jù)類型的規(guī)定。在那里,你就知道該使用16進(jìn)制數(shù)還是BCD碼了, 先列表如下:
WORD 可以是2進(jìn)制數(shù),或者16進(jìn)制數(shù),或者BCD碼。
DWORD 可以是2進(jìn)制數(shù),或者16進(jìn)制數(shù),或者10進(jìn)制數(shù)。
然而,
INT , DINT 只能是10進(jìn)制數(shù)或者16進(jìn)制數(shù)。
參考出處:
STEP7 中的幫助,在索引項(xiàng)的"輸入要查找的關(guān)鍵字"中輸入: INT
PLC本身是不用區(qū)分的,我覺得在通訊的時(shí)候比較有用到;比如上位機(jī)采集200的時(shí)間的時(shí)候,200提供的是BCD碼的時(shí)間;而上位機(jī)跟200對時(shí)的時(shí)候也需要給200BCD碼的時(shí)間。主要還是編程的時(shí)候,處于省時(shí)省力的考慮吧。