Mitsubishi MC Protocol Read Node Not connected or timeout

From Subject Received Size Categories
Jason Meyer 2:18 PM 114 KB

1 Like

using the read node I though i would be able to monitor this PLC value for whenever it changes and not have to use an Inject to see the value thru a debug node? I realize this may be a basic Node-Red question...

[
{
"id": "08a482e7a2022352",
"type": "switch",
"z": "c409bd4bcb4231c2",
"name": "=500",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "500",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 350,
"y": 1420,
"wires": [
[
"4771c477e05effe7"
]
]
},
{
"id": "944050346ac58354",
"type": "MC Read",
"z": "c409bd4bcb4231c2",
"name": "D03804",
"topic": "",
"connection": "8bf9ce709d0bac70",
"address": "D03804",
"addressType": "msg",
"outputFormat": "1",
"errorHandling": "throw",
"outputs": 1,
"x": 160,
"y": 1420,
"wires": [
[
"08a482e7a2022352"
]
]
},
{
"id": "4771c477e05effe7",
"type": "debug",
"z": "c409bd4bcb4231c2",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 570,
"y": 1420,
"wires":
},
{
"id": "8bf9ce709d0bac70",
"type": "MC Protocol Connection",
"name": "PLC1",
"host": "192.168.3.39",
"port": "3001",
"protocol": "UDP",
"frame": "3E",
"plcType": "Q",
"ascii": false,
"PLCStation": "",
"PCStation": "",
"PLCModuleNo": "",
"network": "",
"octalInputOutput": false,
"timeout": "1000"
}
]

flows.json (1.8 KB)

You can use the rbe/filter node to differentiate changes.

My advice it to program the plc to out all values of interest into 1 contiguous area (e.g D1000-D1199) and read all values at once then use buffer-parser to convert the values into book/string/float/int. That way, there are less requests and all data is concurrent.

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

ok but it does not report on change of value in the debug still. do i need to put something in front of the MC read node to trigger on change?

[
    {
        "id": "08a482e7a2022352",
        "type": "switch",
        "z": "c409bd4bcb4231c2",
        "name": "=500",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "500",
                "vt": "str"
            }
        ],
        "checkall": "false",
        "repair": false,
        "outputs": 1,
        "x": 390,
        "y": 1540,
        "wires": [
            [
                "4771c477e05effe7"
            ]
        ]
    },
    {
        "id": "944050346ac58354",
        "type": "MC Read",
        "z": "c409bd4bcb4231c2",
        "name": "D03804",
        "topic": "",
        "connection": "8bf9ce709d0bac70",
        "address": "D03804",
        "addressType": "msg",
        "outputFormat": "1",
        "errorHandling": "throw",
        "outputs": 1,
        "x": 200,
        "y": 1540,
        "wires": [
            [
                "08a482e7a2022352"
            ]
        ]
    },
    {
        "id": "4771c477e05effe7",
        "type": "debug",
        "z": "c409bd4bcb4231c2",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 610,
        "y": 1540,
        "wires": []
    },
    {
        "id": "c51acb6bb427d696",
        "type": "rbe",
        "z": "c409bd4bcb4231c2",
        "name": "",
        "func": "rbe",
        "gap": "",
        "start": "",
        "inout": "out",
        "septopics": true,
        "property": "payload",
        "topi": "topic",
        "x": 370,
        "y": 1620,
        "wires": [
            [
                "8b043a0ebe68d63a"
            ]
        ]
    },
    {
        "id": "43737051c3b45b63",
        "type": "MC Read",
        "z": "c409bd4bcb4231c2",
        "name": "D03804",
        "topic": "",
        "connection": "8bf9ce709d0bac70",
        "address": "D03804",
        "addressType": "msg",
        "outputFormat": "0",
        "errorHandling": "throw",
        "outputs": 1,
        "x": 200,
        "y": 1620,
        "wires": [
            [
                "c51acb6bb427d696"
            ]
        ]
    },
    {
        "id": "8b043a0ebe68d63a",
        "type": "debug",
        "z": "c409bd4bcb4231c2",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 610,
        "y": 1620,
        "wires": []
    },
    {
        "id": "8bf9ce709d0bac70",
        "type": "MC Protocol Connection",
        "name": "PLC1",
        "host": "192.168.3.39",
        "port": "3001",
        "protocol": "UDP",
        "frame": "3E",
        "plcType": "Q",
        "ascii": false,
        "PLCStation": "",
        "PCStation": "",
        "PLCModuleNo": "",
        "network": "",
        "octalInputOutput": false,
        "timeout": "1000"
    }
]

Yes. The MC protocol node does not poll the plc. You will need to use an inject set to repeat every X seconds.

hmm... ok for my application I kind of need to see the update faster than every second. To your knowledge is there another Open System protocol that polls with a Mitsubishi PLC or can I use another node in front of the MC read node besides an Inject since it seems I am limited to 1 second?

Why exactly? Please explain.

Not on node-red.

Yes, & I will tell you after you answer the first question (I dont mean to question your capabilities but sometimes people believe they MUST poll faster than 1 sec to catch something like a button press - but a simple ladder mod can be used instead)

In the PLC a bit turns on about 2 times a second in which I then need to trigger my scanner to turn on for 200-400ms

General Question: in your opinion is Nod-Red an reliable application in an industrial environment? I mean as long as the PC hardware chosen or setup is.

Yes it is reliable. Is/Was for me. But you have to realise network delays, non deterministic nature of Ethernet & the fact that mitsi Ethernet comms are (in my experience) notoriously unreliable (ok, so TCP isnt great but the UDP comms were a bit more stable)

This sounds like it is more suited to field network integration.

  • What is "the scanner"?
  • What field networks does the scanner support?
  • What do you do with the scanner results? Process them in node-red?
  • How "repeatable" / accurate is the timing? are you talking about some moving production line?
    • I ask because MC Protocol over ethernet is non deterministic. Additionally, in Q series (and below) the network stack is part of the overall PLC SCAN - meaning if your ladder instructions cause a delay, the COMMS will not be services until after the ladder scan (meaning jitter/variation in timing)



PS, the answer to the other question is: you can enter 0.25 into the inject repeat to achieve a 250ms pulse. NOTE: you will need to use an RBE/filter node to check that the value has changed otherwise you would trigger this "scanner" repeatedly.

Matrix 220 Data Sheet _ English A4 (1).pdf (1.6 MB)
This should answer the first 2 questions

-For the scanner results we are reading them into node-red thru TCP/IP and then having Node-Red write to an MS Sql server instance on a server in addition to writing to a locally installed MS Sql server instance in the event the network or server goes down we can sync the databeses.

-Repeatable.. The product moves thru the machine at a repeatable rate but sometimes there is no product in that position so the machine does not trigger a scan.

Tbh, if I were integrating this product with a PLC I would connect it to the PLC directly. Then I would store results in a BUFFER (A FIFO table) inside the plc and simply poll the FIFO and collect the data at a slower rate. If the node-red ~ PLC connection is lost, the PLC still runs & data is still collected. Once node-red reconnects, the buffered data can be collected. This has multiple benefits....

  1. No loss of data (limited by PLC memory)
  2. More accurate data timing
  3. Node-red becomes passive (no downtime due to failure of a PC)

The manual states that it supports ...

  • Ethernet 10/100 Mbit/s: TCP/IP, UDP, FTP and Fieldbus PROFINET IO, Ethernet IP, Modbus TCP
  • Serial RS-232/RS422FD up to 115.2 Kbit/s + Serial Aux RS-232

Using one of these field level communications means the device still operates when node-red is down.

I know the Scanner does do OPC UA as well. Just not sure how to setup communication to Read, Trigger and then send to the MS Sql instance.

We will investigate this.

The OPC UA option would add another point of failure. I had nothing but trouble with Mitsi & OPC.

I think we will revisit the field level communications. We went away from this since we were worried about memory in the PLC but if we are fairly quickly poll the PLC to store the data long term we should be fine. Not to mention in the PLC is not running there will be no need to capture data