Reading multiple addresses from MC Protocol (Mitsubishi FX PLC)

@Steve-Mcl
i have multiple address but i need to use function node or any node and mc protocol node to get all in their respective data
for example i have tag like
D1101
D1077
D993
M20
Y34
D216
etc

Your solution about that did not understand me because i tried it to change to my address but was not working as expected

Please Reply @Steve-Mcl

Your question is not entirely clear.

Are you asking how to read from different memory addresses in one READ node all in one network transaction?

Or are you asking how you can dynamically read different addresses with 1 node in separate network transactions?

Or something related to converting the data you have read?

Please be clear and use annotated screenshots where it is hard to explain.

@Steve-Mcl
i want read Multiple Address through MC protocol but using 1 node if possible but using function node to put address with their respective name i assume i might have address around 120 so i wont put 120 mc protocol node in pallet and play with it

Are you asking how to read from different memory addresses in one READ node all in one network transaction?

YES But for FX3U only just 1 PLC as i am put SCREEN SHOT Below

As I stated in the other post, you cannot read different device areas (e.g. D and Y and M) in a single network transaction - that is not supported by this node.

Instead, you should gather all values in a continuous D area (using ladder) and read them all in one go. This ensures consistent data as described in the article I linked you to before.

You can provide an address in the msg and dynamically (one area at a time) read or write different addresses - but your data will be susceptible to inconsistencies (as described in the article)

QUESTION: How often do you need to poll the data?

QUESTION: Can you provide an entire list of addresses you need to read in this format:

Address Type Read frequency
Y34 BIT every 1 sec
D1101 UINT When Y34 == 1
D1077 UINT When Y34 == 1
... ... ...

QUESTION: Can you provide an entire list of addresses you need to write

Address Type Write frequency
M20 BIT when user presses dashboard button
D993 UINT Every minute
... ... ...

with the above info i can help you structure a more maintainable design than you have in your screenshot

@Steve-Mcl
JM_3_PRESS_REG.pdf (289.3 KB)

you can check it i have right now this much tag i will add if i get to know how to use it

that is as clear as mud.

for example, D1077 is listed 4 times with different comments, there are no data types (are these D values all Signed Integers? Unsigned Integers? Are they all 16 bit or are some of them 32 bit?

Any how, the majority of them are in an area reasonably sized range to be able to grab them in one hit.

Here is an example:

Demo Flow (use CTRL+I to import)

[{"id":"9d5fe86ef9060dfc","type":"buffer-parser","z":"0f909bac596182b4","name":"Convert array ro named values","data":"payload","dataType":"msg","specification":"spec","specificationType":"ui","items":[{"type":"int16le","name":"extrusionRodNumber","offset":0,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"extrusionTime","offset":2,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"temperatureGiven","offset":4,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"temperatureSetting","offset":6,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"rapida","offset":28,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"chamdaDe","offset":30,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"protecaob","offset":32,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"protecaoa","offset":34,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"freagem","offset":36,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"limitPressureOfMasterCylinder","offset":42,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"veloc4","offset":44,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"veloc3","offset":46,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"veloc2","offset":48,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"rapida","offset":50,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"fillingPressureGiven","offset":52,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"slopeGivenOfBreakthroughPressure","offset":54,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"velocityAttenuationRatio","offset":58,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"velocityAttenuationStroke","offset":60,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"maximumStrokeGiven","offset":68,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"actualValueOfCoil","offset":136,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"breakthroughPressure","offset":160,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"residualPosition","offset":172,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"masterCylinderPosition","offset":174,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"rateOfDecay","offset":176,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"pressureOfMainCylinder","offset":182,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"speedGiven","offset":184,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"settingPointOfCoil","offset":186,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"pressureOfSideCylinder","offset":188,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"coilCurrent","offset":190,"length":1,"offsetbit":0,"scale":"1","mask":""},{"type":"int16le","name":"masterCylinderSpeed","offset":192,"length":1,"offsetbit":0,"scale":"1","mask":""}],"swap1":"swap16","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload","msgPropertyType":"str","resultType":"keyvalue","resultTypeType":"return","multipleResult":false,"fanOutMultipleResult":false,"setTopic":true,"outputs":1,"x":490,"y":1180,"wires":[["f2595a732b6b660f"]]},{"id":"69fd61c05090c7fa","type":"inject","z":"0f909bac596182b4","name":"","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"D990,99","x":200,"y":1080,"wires":[["bf28bf135f832821"]]},{"id":"f2595a732b6b660f","type":"debug","z":"0f909bac596182b4","name":"debug 390","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":550,"y":1260,"wires":[]},{"id":"a3d02109deacdab5","type":"group","z":"0f909bac596182b4","name":"FAKE:  Read D990,99 \\n (99 Words starting from D990) \\n Replace me with MC READ Node","style":{"label":true},"nodes":["bf28bf135f832821","59f8997f6e58892a","354fb8229f36ba34"],"x":294,"y":967,"w":432,"h":154},{"id":"bf28bf135f832821","type":"template","z":"0f909bac596182b4","g":"a3d02109deacdab5","name":"fake PLC data","field":"payload","fieldType":"msg","format":"json","syntax":"mustache","template":"[\n  2,\n  1200,\n  350,\n  360,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  4,\n  0,\n  -250,\n  -245,\n  100,\n  0,\n  0,\n  2800,\n  4,\n  3,\n  2,\n  1,\n  1500,\n  50,\n  0,\n  95,\n  500,\n  0,\n  0,\n  0,\n  1024,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  300,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  0,\n  2500,\n  0,\n  0,\n  10,\n  11,\n  -5,\n  0,\n  0,\n  2500,\n  1200,\n  50,\n  1750,\n  0,\n  0,\n  0\n]\n","output":"json","x":400,"y":1080,"wires":[["59f8997f6e58892a","354fb8229f36ba34"]]},{"id":"59f8997f6e58892a","type":"buffer-maker","z":"0f909bac596182b4","g":"a3d02109deacdab5","name":"int16 to buffer","specification":"spec","specificationType":"ui","items":[{"name":"item1","type":"int16be","length":-1,"dataType":"msg","data":"payload"}],"swap1":"","swap2":"","swap3":"","swap1Type":"swap","swap2Type":"swap","swap3Type":"swap","msgProperty":"payload","msgPropertyType":"str","x":600,"y":1080,"wires":[["9d5fe86ef9060dfc"]]},{"id":"354fb8229f36ba34","type":"debug","z":"0f909bac596182b4","g":"a3d02109deacdab5","name":"PLC Data","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":620,"y":1040,"wires":[]}]

In short, as the linked article states. Getting as many data items in one go will increase speed, will reduce network traffic, will improve data consistency.

So you should repeat this for other ranges.

The better solution is to re-arrange ALL parts of data into a single D area and read that all in one go then parse out the flags and WORDS and FLOATS using buffer-parser.

What about D_bit, M, X and Y address how to get it

The buffer parser can pick out BITs from the DM

So for the example I did earlier, to get bits from a D register, just chose BOOL and a byte and bit offset in the buffer parser.

Its all detailed and explained in the built-in help (node-red side bar) and the built in examples for buffer-parser (examples are access via CTRL-I -> examples

there are also LOTS of examples and demos in the forum (search buffer parser).

For reading Y / M / X, you can request them from the MC READ node as a word (or multiple words) with a digit specifier like K4 e.g. K4Y0,10 should read 10 16bit WORDSs starting from Y0 - then you pick out the bits using buffer parser

I really did not understand what to do i tried to play with the example to really data but it did not worked me and as i share you my address could you please provide me with real data instead of using fake, what i means is i need to use this address to show it on UI.

Share your none working flow (Select relevant nodes, press CTRL+E, copy to clipboard, paste in reply) so i can see what you did

[
    {
        "id": "e95a7b2e1151c8ce",
        "type": "tab",
        "label": "Flow 1",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "a3d02109deacdab5",
        "type": "group",
        "z": "e95a7b2e1151c8ce",
        "name": "FAKE:  Read D990,99 \\n (99 Words starting from D990) \\n Replace me with MC READ Node",
        "style": {
            "label": true
        },
        "nodes": [
            "354fb8229f36ba34"
        ],
        "x": 474,
        "y": 27,
        "w": 217,
        "h": 114
    },
    {
        "id": "9d5fe86ef9060dfc",
        "type": "buffer-parser",
        "z": "e95a7b2e1151c8ce",
        "name": "Convert array ro named values",
        "data": "payload",
        "dataType": "msg",
        "specification": "spec",
        "specificationType": "ui",
        "items": [
            {
                "type": "int16le",
                "name": "extrusionRodNumber",
                "offset": 0,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "extrusionTime",
                "offset": 2,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "temperatureGiven",
                "offset": 4,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "temperatureSetting",
                "offset": 6,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "rapida",
                "offset": 28,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "chamdaDe",
                "offset": 30,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "protecaob",
                "offset": 32,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "protecaoa",
                "offset": 34,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "freagem",
                "offset": 36,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "limitPressureOfMasterCylinder",
                "offset": 42,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "veloc4",
                "offset": 44,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "veloc3",
                "offset": 46,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "veloc2",
                "offset": 48,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "rapida",
                "offset": 50,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "fillingPressureGiven",
                "offset": 52,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "slopeGivenOfBreakthroughPressure",
                "offset": 54,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "velocityAttenuationRatio",
                "offset": 58,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "velocityAttenuationStroke",
                "offset": 60,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "maximumStrokeGiven",
                "offset": 68,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "actualValueOfCoil",
                "offset": 136,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "breakthroughPressure",
                "offset": 160,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "residualPosition",
                "offset": 172,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "masterCylinderPosition",
                "offset": 174,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "rateOfDecay",
                "offset": 176,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "pressureOfMainCylinder",
                "offset": 182,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "speedGiven",
                "offset": 184,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "settingPointOfCoil",
                "offset": 186,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "pressureOfSideCylinder",
                "offset": 188,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "coilCurrent",
                "offset": 190,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "masterCylinderSpeed",
                "offset": 192,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            }
        ],
        "swap1": "swap16",
        "swap2": "",
        "swap3": "",
        "swap1Type": "swap",
        "swap2Type": "swap",
        "swap3Type": "swap",
        "msgProperty": "payload",
        "msgPropertyType": "str",
        "resultType": "value",
        "resultTypeType": "return",
        "multipleResult": true,
        "fanOutMultipleResult": false,
        "setTopic": true,
        "outputs": 1,
        "x": 430,
        "y": 240,
        "wires": [
            [
                "f2595a732b6b660f"
            ]
        ]
    },
    {
        "id": "69fd61c05090c7fa",
        "type": "inject",
        "z": "e95a7b2e1151c8ce",
        "name": "",
        "props": [
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "D990,99",
        "x": 140,
        "y": 140,
        "wires": [
            [
                "9fac3f141851276c"
            ]
        ]
    },
    {
        "id": "f2595a732b6b660f",
        "type": "debug",
        "z": "e95a7b2e1151c8ce",
        "name": "debug 390",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 490,
        "y": 320,
        "wires": []
    },
    {
        "id": "354fb8229f36ba34",
        "type": "debug",
        "z": "e95a7b2e1151c8ce",
        "g": "a3d02109deacdab5",
        "name": "PLC Data",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 560,
        "y": 100,
        "wires": []
    },
    {
        "id": "9fac3f141851276c",
        "type": "MC Read",
        "z": "e95a7b2e1151c8ce",
        "name": "",
        "topic": "",
        "connection": "68f68eb02a618617",
        "address": "D990",
        "addressType": "str",
        "outputFormat": "1",
        "errorHandling": "throw",
        "outputs": 1,
        "x": 340,
        "y": 140,
        "wires": [
            [
                "354fb8229f36ba34",
                "9d5fe86ef9060dfc"
            ]
        ]
    },
    {
        "id": "68f68eb02a618617",
        "type": "MC Protocol Connection",
        "name": "",
        "host": "192.168.2.20",
        "port": "5001",
        "protocol": "TCP",
        "frame": "1E",
        "plcType": "Q",
        "ascii": false,
        "PLCStation": "2",
        "PCStation": "255",
        "PLCModuleNo": "2",
        "network": "2",
        "octalInputOutput": false,
        "timeout": "20000"
    }
]

admin edit: wrap flow in backticks

sorry did send you wrong flow before
flows (1).json (11.1 KB)
@Steve-Mcl
Are you there

that is only the MC Protocol node.

I said "Share your none working flow (Select relevant nodes..."


That said, i can see you have entered the address D990. That will READ only 1 WORD of data!. How do you expect to parse things like temperatureSetting which is at D993?

Let me explain the point of this all.

  1. You want to READ from the PLC many things at once to make your code easier to maintain, get best performance, get good consistent data
  2. So we read 99 16 bit integers starting from D990
    1. Remember, D registers are 16 bit AKA 2 bytes wide
  3. That means D990 value is at index 0 (offset byte 0)
  4. That means D991 value is at index 1 (offset byte 2)
  5. That means D992 value is at index 2 (offset byte 4)
  6. That means D993 value is at index 3 (offset byte 6)

Here is a table of things from your PDF and how they align with D990 as the starting point

Remember, the 99 points of data are READ starting from D990, Index 0, byte offset 0

ITEM AREA ADDR Nicer Property Name Byte Offset Index Offset
EXTRUSION ROD NUMBER D 990 extrusionRodNumber 0 0
EXTRUSION TIME D 991 extrusionTime 2 1
TEMPERATURE GIVEN D 992 temperatureGiven 4 2
TEMPERATURE SETTING D 993 temperatureSetting 6 3
RAPIDA D 1004 rapida 28 14
CHAMDA DE D 1005 chamdaDe 30 15
PROTECAOB D 1006 protecaob 32 16
PROTECAOA D 1007 protecaoa 34 17
FREAGEM D 1008 freagem 36 18
LIMIT PRESSURE OF MASTER CYLINDER D 1011 limitPressureOfMasterCylinder 42 21
VELOC 4 D 1012 veloc4 44 22
VELOC 3 D 1013 veloc3 46 23
VELOC 2 D 1014 veloc2 48 24
RAPIDA D 1015 rapida 50 25
FILLING PRESSURE GIVEN D 1016 fillingPressureGiven 52 26
SLOPE GIVEN OF BREAKTHROGH PRESSURE D 1017 slopeGivenOfBreakthroughPressure 54 27
VELOCITY ATTENUATION RATIO D 1019 velocityAttenuationRatio 58 29
VELOCITY ATTENUATION STROKE D 1020 velocityAttenuationStroke 60 30
MAXIMUM STROKE GIVEN D 1024 maximumStrokeGiven 68 34
ACTUAL VALUE OF COIL D 1058 actualValueOfCoil 136 68
BREAK THROGH PRESSURE D 1070 breakthroughPressure 160 80
RESIDUAL POSITION D 1076 residualPosition 172 86
MASTER CYLNDER POSITION D 1077 masterCylinderPosition 174 87
RATE OF DECAY D 1078 rateOfDecay 176 88
PRESSURE OF MAIN CYLINDER D 1081 pressureOfMainCylinder 182 91
SPEED GIVEN D 1082 speedGiven 184 92
SETTING POINT OF COIL D 1083 settingPointOfCoil 186 93
PRESSURE OF SIDE CYLINDER D 1084 pressureOfSideCylinder 188 94
COIL CURRENT D 1085 coilCurrent 190 95
MASTER CYLINDER SPPED D 1086 masterCylinderSpeed 192 96

Note how rateOfDecay is entered in the buffer parser as using byte Offset 176 - and how it matches up to D1078 in the above table.

Recap

In order to PARSE a chunk of data all at once, into nicely formatted object, you first NEED to request 99 things. Thats why I put D990,99 in the comments and in the inject node and wrote it explicitly for you

Does that make sense?


Also, in order to make code readable and usable it is necessary to surround your code with three backticks (also known as a left quote or backquote ```)

``` 
   code goes here 
```

You can edit and correct your post by clicking the pencil :pencil2: icon.

See this post for more details - How to share code or flow json

[
    {
        "id": "e95a7b2e1151c8ce",
        "type": "tab",
        "label": "Flow 1",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "a3d02109deacdab5",
        "type": "group",
        "z": "e95a7b2e1151c8ce",
        "name": "FAKE:  Read D990,99 \\n (99 Words starting from D990) \\n Replace me with MC READ Node",
        "style": {
            "label": true
        },
        "nodes": [
            "354fb8229f36ba34"
        ],
        "x": 474,
        "y": 27,
        "w": 217,
        "h": 114
    },
    {
        "id": "9d5fe86ef9060dfc",
        "type": "buffer-parser",
        "z": "e95a7b2e1151c8ce",
        "name": "Convert array ro named values",
        "data": "payload",
        "dataType": "msg",
        "specification": "spec",
        "specificationType": "ui",
        "items": [
            {
                "type": "int16le",
                "name": "extrusionRodNumber",
                "offset": 0,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "extrusionTime",
                "offset": 2,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "temperatureGiven",
                "offset": 4,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "temperatureSetting",
                "offset": 6,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "rapida",
                "offset": 28,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "chamdaDe",
                "offset": 30,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "protecaob",
                "offset": 32,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "protecaoa",
                "offset": 34,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "freagem",
                "offset": 36,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "limitPressureOfMasterCylinder",
                "offset": 42,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "veloc4",
                "offset": 44,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "veloc3",
                "offset": 46,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "veloc2",
                "offset": 48,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "rapida",
                "offset": 50,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "fillingPressureGiven",
                "offset": 52,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "slopeGivenOfBreakthroughPressure",
                "offset": 54,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "velocityAttenuationRatio",
                "offset": 58,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "velocityAttenuationStroke",
                "offset": 60,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "maximumStrokeGiven",
                "offset": 68,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "actualValueOfCoil",
                "offset": 136,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "breakthroughPressure",
                "offset": 160,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "residualPosition",
                "offset": 172,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "masterCylinderPosition",
                "offset": 174,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "rateOfDecay",
                "offset": 176,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "pressureOfMainCylinder",
                "offset": 182,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "speedGiven",
                "offset": 184,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "settingPointOfCoil",
                "offset": 186,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "pressureOfSideCylinder",
                "offset": 188,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "coilCurrent",
                "offset": 190,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            },
            {
                "type": "int16le",
                "name": "masterCylinderSpeed",
                "offset": 192,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            }
        ],
        "swap1": "swap16",
        "swap2": "",
        "swap3": "",
        "swap1Type": "swap",
        "swap2Type": "swap",
        "swap3Type": "swap",
        "msgProperty": "payload",
        "msgPropertyType": "str",
        "resultType": "value",
        "resultTypeType": "return",
        "multipleResult": true,
        "fanOutMultipleResult": false,
        "setTopic": true,
        "outputs": 1,
        "x": 430,
        "y": 240,
        "wires": [
            [
                "f2595a732b6b660f"
            ]
        ]
    },
    {
        "id": "69fd61c05090c7fa",
        "type": "inject",
        "z": "e95a7b2e1151c8ce",
        "name": "",
        "props": [
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "D990,99",
        "x": 140,
        "y": 140,
        "wires": [
            [
                "9fac3f141851276c"
            ]
        ]
    },
    {
        "id": "f2595a732b6b660f",
        "type": "debug",
        "z": "e95a7b2e1151c8ce",
        "name": "debug 390",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 490,
        "y": 320,
        "wires": []
    },
    {
        "id": "354fb8229f36ba34",
        "type": "debug",
        "z": "e95a7b2e1151c8ce",
        "g": "a3d02109deacdab5",
        "name": "PLC Data",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 560,
        "y": 100,
        "wires": []
    },
    {
        "id": "9fac3f141851276c",
        "type": "MC Read",
        "z": "e95a7b2e1151c8ce",
        "name": "",
        "topic": "",
        "connection": "68f68eb02a618617",
        "address": "D990",
        "addressType": "str",
        "outputFormat": "1",
        "errorHandling": "throw",
        "outputs": 1,
        "x": 340,
        "y": 140,
        "wires": [
            [
                "354fb8229f36ba34",
                "9d5fe86ef9060dfc"
            ]
        ]
    },
    {
        "id": "68f68eb02a618617",
        "type": "MC Protocol Connection",
        "name": "",
        "host": "192.168.2.20",
        "port": "5001",
        "protocol": "TCP",
        "frame": "1E",
        "plcType": "Q",
        "ascii": false,
        "PLCStation": "2",
        "PCStation": "255",
        "PLCModuleNo": "2",
        "network": "2",
        "octalInputOutput": false,
        "timeout": "20000"
    }
]

@Steve-Mcl I have paste the code

Also, read the built in help for the nodes.

@Steve-Mcl
could you help me a bit in the code, i am bit confused and i dont know how to use it proper as you are guiding me but still

I have given you LOTS of help already. More than most. You have all the information above. I am not sure I can do more to help than I already have!

Just try setting the MC READ node address field to D990,99 - see what happens.

Use debug nodes on every node to look at what goes in, and what comes out.

@Steve-Mcl
i set MC protocol node to D990,99 and it give me timeout error as a result it did
not worked
and the code i mention about is i removed ,99 from it and it worked for MC Protocol node but for buffer it say "Error: data is not an array or a buffer"