# Modbus crc16 calculation function error syntax

**URL:** <https://discourse.nodered.org/t/modbus-crc16-calculation-function-error-syntax/68657>\
**Category:** General\
**Tags:** function-node\
**Created:** [7 October 2022 06:20 UTC](https://discourse.nodered.org/t/modbus-crc16-calculation-function-error-syntax/68657 "2022-10-07T06:20:03Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Angin](https://avatars.discourse-cdn.com/v4/letter/a/eb8c5e/32.png) [@Angin](https://discourse.nodered.org/u/Angin)\
**Post date:** [7 October 2022 06:20 UTC](https://discourse.nodered.org/t/modbus-crc16-calculation-function-error-syntax/68657/1 "2022-10-07T06:20:03Z")

</div>

I used a previous crc16 calculation function, but now it prompts an error syntax. As shown in the picture.

 ![crc16](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/2/4/24d3182d501f275bca287c11fce469b0a2c2216d.png)

```auto
function crc16(str){
    var buf = Buffer.from(str,'hex')
    var crc = 0xFFFF;
    for(var i = 0;i<buf.length;i++){
        crc = crc^buf[i];
        for(var j = 0;j<8;j++){
            var temp = crc & 0x01;
            crc>>=0x01;
            if(temp == 0x01){
                crc ^= 0xA001;
            }
        }
    }
    return crc;
}

var arr =crc16(msg.payload).toString(16).toUpperCase();
arr = arr.substring(-4).split("");
msg.payload = msg.payload+arr.splice(-2).concat(arr).join("");
return msg;

```

I temporarily used a simple replacement method, but it doesn't feel strict enough.

```auto
msg.payload = Buffer.from(msg.payload + [arr[2]+arr[3]+arr[0]+arr[1]],"hex");

```

Is there any way to change the error message?Thank you very much!

---

<div class="post-metadata">

**Author:** ![edje11](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/edje11/32/572_2.png) [@edje11](https://discourse.nodered.org/u/edje11)\
**Post date:** [7 October 2022 06:52 UTC](https://discourse.nodered.org/t/modbus-crc16-calculation-function-error-syntax/68657/2 "2022-10-07T06:52:16Z")

</div>

And what is the error message?

---

<div class="post-metadata">

**Author:** ![Angin](https://avatars.discourse-cdn.com/v4/letter/a/eb8c5e/32.png) [@Angin](https://discourse.nodered.org/u/Angin)\
**Post date:** [7 October 2022 07:37 UTC](https://discourse.nodered.org/t/modbus-crc16-calculation-function-error-syntax/68657/3 "2022-10-07T07:37:55Z")

</div>

The error message is：

![crc16-02](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/1/1/11de6b906092e76c3ff67f4d487cb9615581605d.png)

---

<div class="post-metadata">

**Author:** ![bakman2](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/bakman2/32/6207_2.png) [@bakman2](https://discourse.nodered.org/u/bakman2)\
**Post date:** [7 October 2022 08:09 UTC](https://discourse.nodered.org/t/modbus-crc16-calculation-function-error-syntax/68657/4 "2022-10-07T08:09:11Z")

</div>

did you mean slice ? there is no splice. There is split and there is slice.

---

<div class="post-metadata">

**Author:** ![E1cid](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/e1cid/32/77971_2.png) [@E1cid](https://discourse.nodered.org/u/E1cid)\
**Post date:** [7 October 2022 08:36 UTC](https://discourse.nodered.org/t/modbus-crc16-calculation-function-error-syntax/68657/5 "2022-10-07T08:36:17Z")

</div>

> [@Angin](#):
>
> ```auto
> var arr =crc16(msg.payload).toString(16).toUpperCase();
> arr = arr.substring(-4).split("");
> msg.payload = msg.payload+arr.splice(-2).concat(arr).join("");
> return msg;
> 
> ```

declare arr as an array

```auto
let arr = [];
arr = crc16(msg.payload).toString(16).toUpperCase();
arr = arr.substring(-4).split("");
msg.payload = msg.payload+arr.splice(-2).concat(arr).join("");
return msg;

```

---

<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:** [7 October 2022 08:36 UTC](https://discourse.nodered.org/t/modbus-crc16-calculation-function-error-syntax/68657/6 "2022-10-07T08:36:32Z")

</div>

The issue is monaco (trys) to help too much some times.

It is essentially pointing out the code is not great - the function returns a number, then converts to string then it is split to an array of characters. Technically, it works, but it is ugly.

Here is a very quick fix up...

![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/9/1/9143ae7fb90a0d4b3700d628319999429edf2538.png)

```javascript
function crc16(str) {
    const buf = Buffer.from(str, 'hex')
    let crc = 0xFFFF;
    for (let i = 0; i < buf.length; i++) {
        crc = crc ^ buf[i];
        for (let j = 0; j < 8; j++) {
            const temp = crc & 0x01;
            crc >>= 0x01;
            if (temp == 0x01) {
                crc ^= 0xA001;
            }
        }
    }
    return crc;
}

const crc = crc16(msg.payload)
const arr = crc.toString(16).toUpperCase().substring(-4).split("")
msg.payload = msg.payload + arr.splice(-2).concat(arr).join("");
return msg;

```

---

<div class="post-metadata">

**Author:** ![Angin](https://avatars.discourse-cdn.com/v4/letter/a/eb8c5e/32.png) [@Angin](https://discourse.nodered.org/u/Angin)\
**Post date:** [7 October 2022 09:39 UTC](https://discourse.nodered.org/t/modbus-crc16-calculation-function-error-syntax/68657/7 "2022-10-07T09:39:43Z")

</div>

Thank you very much for your prompt reply!

---

<div class="post-metadata">

**Author:** ![Angin](https://avatars.discourse-cdn.com/v4/letter/a/eb8c5e/32.png) [@Angin](https://discourse.nodered.org/u/Angin)\
**Post date:** [7 October 2022 09:41 UTC](https://discourse.nodered.org/t/modbus-crc16-calculation-function-error-syntax/68657/8 "2022-10-07T09:41:46Z")

</div>

This method is also feasible,thank you!

---

<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:** [21 October 2022 09:42 UTC](https://discourse.nodered.org/t/modbus-crc16-calculation-function-error-syntax/68657/9 "2022-10-21T09:42:14Z")

</div>

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