# OMRON BCD format

**URL:** <https://discourse.nodered.org/t/omron-bcd-format/24847>\
**Category:** General\
**Created:** [15 April 2020 06:13 UTC](https://discourse.nodered.org/t/omron-bcd-format/24847 "2020-04-15T06:13:37Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![farcry](https://avatars.discourse-cdn.com/v4/letter/f/9de053/32.png) [@farcry](https://discourse.nodered.org/u/farcry)\
**Post date:** [15 April 2020 06:13 UTC](https://discourse.nodered.org/t/omron-bcd-format/24847/1 "2020-04-15T06:13:37Z")

</div>

Hello.

I'm comunicating with OMRON using FINS.  
In ledder (Omron) I use BCD values for variables (older project).  
How can I convert / get the right BCD value?  
Thanks.

BR, Andrej.

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [15 April 2020 07:14 UTC](https://discourse.nodered.org/t/omron-bcd-format/24847/2 "2020-04-15T07:14:36Z")

</div>

Hi Andrej, what node are you using to conduct FINS communication with OMRON PLC?

---

<div class="post-metadata">

**Author:** ![farcry](https://avatars.discourse-cdn.com/v4/letter/f/9de053/32.png) [@farcry](https://discourse.nodered.org/u/farcry)\
**Post date:** [23 April 2020 12:29 UTC](https://discourse.nodered.org/t/omron-bcd-format/24847/3 "2020-04-23T12:29:31Z")

</div>

> **[node-red-contrib-omron-fins](https://flows.nodered.org/node/node-red-contrib-omron-fins)**
>
> OMRON FINS Ethernet protocol functions 'Read' and 'write' for communicating with OMRON PLCs from node-red

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [23 April 2020 15:22 UTC](https://discourse.nodered.org/t/omron-bcd-format/24847/4 "2020-04-23T15:22:34Z")

</div>

Heh - i wrote that 🙂

So, yes, BCD is a pain (I rarely use BCD anymore since moving away from C series - almost everything is CJ or N series now)

I have a private repo I use but its not ready for publishing to NPM.

It takes the plain 16bit data returned from PLC and converts it to WD, String, Bits, BCD etc. (quite useful)

If I get some time I'll sort it out later.

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [24 April 2020 08:09 UTC](https://discourse.nodered.org/t/omron-bcd-format/24847/5 "2020-04-24T08:09:58Z")

</div>

For a test, try this in a function node attached to the output of the read node...

Note - untested

```auto
/*
 * number2bcd -> takes a number and returns the corresponding BCD in a nodejs buffer object.
 * input: 32 bit positive number, nodejs buffer size
 * output: nodejs buffer 
 */
var number2bcd = function(number, size) {
    var s = size || 4; //default value: 4
    var bcd = new Buffer(s);
    bcd.fill(0);
    while(number !== 0 && s !== 0) {
        s-=1;
        bcd[s] = (number % 10);
        number = (number / 10)|0;
        bcd[s] += (number % 10) << 4;
        number = (number / 10)|0;
    }
    return bcd;
}

msg.bcd = []
msg.bcd[0] = number2bcd(msg.payload[0]
//Do more or loop payload)

```

Then attach a debug node (show complete object) and inspect msg.bcd

---

<div class="post-metadata">

**Author:** ![farcry](https://avatars.discourse-cdn.com/v4/letter/f/9de053/32.png) [@farcry](https://discourse.nodered.org/u/farcry)\
**Post date:** [24 April 2020 09:22 UTC](https://discourse.nodered.org/t/omron-bcd-format/24847/6 "2020-04-24T09:22:42Z")

</div>

![FINS1](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/3/6/36e322a4f0de69a5ec3956479093dc055cb85ceb.png)

First integer is 8328bcd it should shown 2088dec  
Second -26215 it should be 9999dec.  
The second number should be unsigned integer. (39321) but if I change setting in READ node to unsigned I've got error:

[Type not printable]Uint16Array { '0': 8336, '1': 39321, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 2, '9': 4369}

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [24 April 2020 10:56 UTC](https://discourse.nodered.org/t/omron-bcd-format/24847/7 "2020-04-24T10:56:51Z")

</div>

So that formula was for the other direction.

I guess this is what you want...  
 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/5/c/5c5c837fd3844c95a728220b4f2dea8d0d63bb11.png)

code...

```auto
var bcd2number = function(num) {
    let loByte = (num & 0x00ff);
    let hiByte = (num >> 8) & 0x00ff;
    let n = 0;
    n += (loByte & 0x0F) * 1;
    n += ((loByte>>4) & 0x0F) * 10;
    n += (hiByte & 0x0F) * 100;
    n += ((hiByte>>4) & 0x0F) * 1000;
    return n;
}

//all of them at once to BCD
msg.bcd = msg.payload.map(bcd2number); 

/* 
//individual cherry picking
msg.motorRuntimeBCD = bcd2number(msg.payload[0])
msg.motorSpeedDEC = msg.payload[1] 
msg.luxLevelBCD = bcd2number(msg.payload[2])
*/

return msg;

```

Here is a working demo (press the play button to see it in action)...  
https://repl.it/@StephenMcLaughl/bcd2number?lite=true

---

<div class="post-metadata">

**Author:** ![farcry](https://avatars.discourse-cdn.com/v4/letter/f/9de053/32.png) [@farcry](https://discourse.nodered.org/u/farcry)\
**Post date:** [24 April 2020 11:25 UTC](https://discourse.nodered.org/t/omron-bcd-format/24847/8 "2020-04-24T11:25:18Z")

</div>

Thanks.

 ![FINS](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/0/9/09873fd59c1ddd65b048e49033352a11879ec4fa.png)

It works perfectly.  
Thanks.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/d073cd938eafa2e558d7c2cd59003b3ef4963033.png) [@system](https://discourse.nodered.org/u/system)\
**Post date:** [8 May 2020 11:25 UTC](https://discourse.nodered.org/t/omron-bcd-format/24847/9 "2020-05-08T11:25:31Z")

</div>

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.
