Saturday, September 25, 2010

Number Systems

Before we get too far ahead of ourselves, let's take a look at the various number systems used by PLCs.
Many number systems are used by PLCs. Binary and Binary Coded Decimal are popular while octal and hexadecimal systems are also common.

Let's look at each: 
As we do, consider the following formula (Math again!):

Nbase= Ddigit * R^unit + .... D1R^1 + D0R^0
where D=the value of the digit and R= # of digit symbols used in the given number system. 
The "*" means multiplication. ( 5 * 10 = 50) 
The "^" means "to the power of". 
As you'll recall any number raised to the power of 0 is 1. 10^1=10, 10^2 is 10x10=100, 10^3 is 10x10x10=1000, 10^4 is 10x10x10x10=10000...

This lets us convert from any number system back into decimal. Huh? Read on...
  • Decimal- This is the numbering system we use in everyday life. (well most of us do anyway!) We can think of this as base 10 counting. It can be called as base 10 because each digit can have 10 different states. (i.e. 0-9) Since this is not easy to implement in an electronic system it is seldom, if ever, used. If we use the formula above we can find out what the number 456 is. From the formula:
    Nbase= Ddigit * R^unit + .... D1R^1 + D0R^0
    we have (since we're doing base 10, R=10)
N10= D410^2 + D510^1 + D610^0
= 4*100 + 5*10 + 6*
= 400 + 50 + 6
= 456.
  • Binary- This is the numbering system computers and PLCs use. It was far easier to design a system in which only 2 numbers (0 and 1) are manipulated (i.e. used). 
    The binary system uses the same basic principles as the decimal system. In decimal we had 10 digits. (0-9) In binary we only have 2 digits (0 and 1). In decimal we count: 0,1,2,3,4,5,6,7,8,9, and instead of going back to zero, we start a new digit and then start from 0 in the original digit location.
    In other words, we start by placing a 1 in the second digit location and begin counting again in the original location like this 10,11,12,13, ... When again we hit 9, we increment the second digit and start counting from 0 again in the original digit location. Like 20,21,22,23.... of course this keeps repeating. And when we run out of digits in the second digit location we create a third digit and again start from scratch.(i.e. 99, 100, 101, 102...)
    Binary works the same way. We start with 0 then 1. Since there is no 2 in binary we must create a new digit.
    Therefore we have 0, 1, 10, 11 and again we run out of room. Then we create another digit like 100, 101, 110, 111. Again we ran out of room so we add another digit... Do you get the idea?
    The general conversion formula may clear things up:
    Nbase= Ddigit * R^unit + .... D1R^1 + D0R^0. 
    Since we're now doing binary or base 2, R=2. Let's try to convert the binary number 1101 back into decimal.
N10= D1 * 2^3 + D1 * 2^2 + D0 * 2^1 + D1 * 2^0
= 1*8 + 1*4 + 0*2 + 1*1
= 13
= 8 + 4 +0 +1
(if you don't see where the 8,4,2, and 1 came from, refer
to the table below).
Now we can see that binary 1101 is the same as decimal 13. Try translating binary 111. You should get decimal 7. Try binary 10111. You should get decimal 23.
Here's a simple binary chart for reference. The top row shows powers of 2 while the bottom row shows their equivalent decimal value.
Binary Number Conversions
2^152^142^132^122^112^102^92^82^72^62^52^42^32^22^12^0
327681638481924096204810245122561286432168421
  • Octal- The binary number system requires a ton of digits to represent a large number. Consider that binary 11111111 is only decimal 255. A decimal number like 1,000,000 ("1 million") would need a lot of binary digits! Plus it's also hard for humans to manipulate such numbers without making mistakes. 
    Therefore several computer/plc manufacturers started to implement the octal number system. 
    This system can be thought of as base8 since it consists of 8 digits. (0,1,2,3,4,5,6,7)
    So we count like 0,1,2,3,4,5,6,7,10,11,12...17,20,21,22...27,30,... 
    Using the formula again, we can convert an octal number to decimal quite easily.
    Nbase= Ddigit * R^unit + .... D1R^1 + D0R^0 
    So octal 654 would be: (remember that here R=8)
N10= D6 * 8^2 + D5 * 8^1 + D4 * 8^0
= 6*64 + 5*8 + 4*1
= 428
= 384 +40 +4
(if you don't see where the white 64,8 and 1 came from,
refer to the table below).
Now we can see that octal 321 is the same as decimal 209. Try translating octal 76. You should get decimal 62. Try octal 100. You should get decimal 64.

Here's a simple octal chart for your reference. The top row shows powers of 8 while the bottom row shows their equivalent decimal value.
Octal Number Conversions
8^78^68^58^48^38^28^18^0
20971522621443276840965126481

Lastly, the octal system is a convenient way for us to express or write binary numbers in plc systems. A binary number with a large number of digits can be conveniently written in an octal form with fewer digits. This is because 1 octal digit actually represents 3 binary digits.

Believe me that when we start working with register data or address locations in the advanced chapters it becomes a great way of expressing data. The following chart shows what we're referring to:

Binary Number with its Octal Equivalent
1110010011100101
162345

From the chart we can see that binary 1110010011100101 is octal 162345. (decimal 58597) As we can see, when we think of registers, it's easier to think in octal than in binary. As you'll soon see though, hexadecimal is the best way to think. (really)
  • Hexadecimal-The binary number system requires a ton of digits to represent a large number. The octal system improves upon this. The hexadecimal system is the best solution however, because it allows us to use even less digits. It is therefore the most popular number system used with computers and PLCs. (we should learn each one though) 
    The hexadecimal system is also referred to as base 16 or just simply hex. As the name base 16 implies, it has 16 digits. The digits are
    0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. 
    So we count like
    0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,10,11,12,13,...
    1A,1B,1C,1D,1E,1F,20,21... 2A,2B,2C,2D,2E,2F,30... 
    Using the formula again, we can convert a hex number to decimal quite easily. 
    Nbase= Ddigit * R^unit + .... D1R^1 + D0R^0 
    So hex 6A4 would be:(remember here that R=16)
N10= D6 * 16^2 + DA * 16^1 + D4 * 16^0
= 6*256 + A(A=decimal10)*16 + 4*1
= 1536 +160 +4
= 170
0
if you don't see where the 256,16 and 1 came from,
( refer to the table below)
Now we can see that hex FFF is the same as decimal 4095. Try translating hex 76. You should get decimal 118. Try hex 100. You should get decimal 256.

Here's a simple hex chart for reference. The top row shows powers of 16 while the bottom row shows their equivalent decimal value. Notice that the numbers get large rather quickly!

Hex Number Conversions
16^816^716^616^516^416^316^216^116^0
4294967296268435456167772161048576655364096256161

Finally, the hex system is perhaps the most convenient way for us to express or write binary numbers in plc systems. A binary number with a large number of digits can be conveniently written in hex form with fewer digits than octal. This is because 1 hex digit actually represents 4 binary digits.

Believe me that when we start working with register data or address locations in the advanced chapters it becomes the best way of expressing data. The following chart shows what we're referring to:

Binary Number with its Hex Equivalent
0111010010100101
74A5

From the chart we can see that binary 0111010010100101 is hex 74A5. (decimal 29861) As we can see, when we think of registers, it's far easier to think in hex than in binary or octal.
4 digits go a long way after some practice!

No comments:

Post a Comment