Omron uses cookies to improve your experience on this website. By continuing to use the website, you hereby agree to our Privacy and Cookie Policy

**Question**

How should I handle programs that have BCD subtraction operations that result in a negative number?

**Answer**

When the result of a BCD arithmetic operation is a negative number, the operation result will be output as the 10's complement (see Additional Information, below), and the Carry Flag will be turned ON. As shown in Figure 1, immediately after executing the BCD SUBTRACTION WITHOUT CARRY (-B) instruction, the status of the Carry Flag (CY) (ON or OFF) is checked.

**a. When the Carry Flag (CY) Is OFF (Operation Result Is Positive)**

The execution result (D202) of the BCD SUBTRACTION WITHOUT CARRY (-B) instruction is handled as an absolute value without any further manipulation.

In this case, the sign bit (CIO 2.00) turned OFF to indicate a positive number.

**b. When the Carry Flag (CY) Is OFF (Operation Result Is Negative).**

Subtract the execution result (D202: 10's compliment) of the BCD SUBTRACTION WITHOUT CARRY (-B) instruction from 0 to convert it to the actual value, and store it in D202.

In this case, the sign bit (CIO 2.00) is turned ON to indicate a negative number.

**Additional Information**

**What Is a Tan's Complement?**

*a.*Subtract a 4-digit BCD value from 9,999 or an 8-digit BCD value from 99,999,999. The ten's complement is the result with 1 added. In Figure 1, the result of 6,666 - 9,999 is -3,333, but the result that is output is the ten's complement of 3,333 (9,999 is -3,333 + 1, or 6,667). The formula for a 4-digit BCD number is written as follows:

Complement B = 9,999 - True value A + 1 (i)

*b.*Formula (i) can be reversed to calculate the true value A

True value A = 10,000 - Complement B (ii)

*c.*The ten's complement (6,667) can be converted to the true value A (3,333) using the following formula.

10,000 - 6,667 = 3,333. The true value of complement 6,667 is 3,333. (iii)

***[-B #0 D202 D202] in Figure 1 subtracts the complement from 0000, and stores the result in D202.

**Ladder Program and Watch Window**

**(1) For 9,999 - 6,666 = 3,333**

Programming: CS1/CJ1-series Programmable Controllers

Figure 1

Operation

The result of the first -B instruction is, 9,999 (D200) - 6,666 (D201) = 3333 (D202) and the Carry Flag (CY) is turned OFF. For this reason, the second -B instruction will not be executed, and the operation result is 3,333 is handled as an absolute value without any further manipulation. In this case, the sign bit (CIO 2.00) is turned OFF to indicate a positive number.

**BCD SUBTRACT WITHOUT CARRY (-B) Instruction**

Word operands and/or constants are subtracted as 4-digit BCD values.

**Carry Flag (CY)**

This flag is turned ON if there is a carry in the result of the subtraction.

**(2) For 6,666 - 9,999 = -3,333**

Figure 2

Operation

The result of the first -B instruction execution is, 6,666 (D200) - 9,999 (D201) = 6667 (the ten's compliment of 3,333 (D202)) and the Carry Flag (CY) is turned ON. The second -B instruction will be executed, and the complement of 6,667 is converted to the true value (3,333) and stored in D202. In this case, the sign bit (CIO 2.00) is turned ON to indicate a negative number.

- What is the difference between the different operating modes of the Programmable Controller's CPU Unit (i.e., PROGRAM mode, RUN mode, and MONITOR mode)?
- Is there an instruction that can be used in a subroutine to turn OFF an output bit that was turned ON in the main program?
- Will interrupt tasks and interrupt subroutines work properly during overhead processing, I/O refreshing, and peripheral servicing if C200HS-INT01 Interrupt Input Units are used in CS1 or CS200HX/HG/HE Programmable Controllers?