{
  "schemaVersion": 1,
  "metadata": {
    "format": "plcsim.fbd-program",
    "exportedAt": "2026-06-09T13:19:24.192Z",
    "language": "FBD",
    "nodeCount": 12,
    "connectionCount": 9
  },
  "editorGraph": {
    "id": "graph-conveyor-logic-article-14",
    "language": "FBD",
    "version": 1,
    "viewport": {
      "x": 0,
      "y": 0,
      "zoom": 0.85
    },
    "nodeDefinitions": [
      {
        "id": "def-in",
        "blockType": "IN",
        "displayName": "Input",
        "description": "Physical boolean input from the simulator input image.",
        "stateful": false,
        "inputPorts": [],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-out",
        "blockType": "OUT",
        "displayName": "Output",
        "description": "Physical boolean output to the simulator output image.",
        "stateful": false,
        "inputPorts": [
          {
            "id": "in",
            "name": "IN",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": []
      },
      {
        "id": "def-internal-signal",
        "blockType": "INTERNAL_SIGNAL",
        "displayName": "Internal Signal",
        "description": "Named internal boolean signal.",
        "stateful": false,
        "inputPorts": [
          {
            "id": "in",
            "name": "IN",
            "direction": "IN",
            "signalType": "BOOL",
            "required": false,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-and",
        "blockType": "AND",
        "displayName": "AND",
        "description": "Boolean AND: Q = IN1 && IN2.",
        "stateful": false,
        "inputPorts": [
          {
            "id": "in1",
            "name": "IN1",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          },
          {
            "id": "in2",
            "name": "IN2",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-or",
        "blockType": "OR",
        "displayName": "OR",
        "description": "Boolean OR: Q = IN1 || IN2.",
        "stateful": false,
        "inputPorts": [
          {
            "id": "in1",
            "name": "IN1",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          },
          {
            "id": "in2",
            "name": "IN2",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-not",
        "blockType": "NOT",
        "displayName": "NOT",
        "description": "Boolean NOT: Q = !IN.",
        "stateful": false,
        "inputPorts": [
          {
            "id": "in",
            "name": "IN",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-rs",
        "blockType": "RS",
        "displayName": "RS",
        "description": "Reset-dominant latch. Q = (previousQ || S) && !R.",
        "stateful": true,
        "inputPorts": [
          {
            "id": "r",
            "name": "R",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          },
          {
            "id": "s",
            "name": "S",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-const",
        "blockType": "CONST",
        "displayName": "Constant",
        "stateful": false,
        "inputPorts": [],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-xor",
        "blockType": "XOR",
        "displayName": "XOR",
        "stateful": false,
        "inputPorts": [
          {
            "id": "in1",
            "name": "IN1",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          },
          {
            "id": "in2",
            "name": "IN2",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-move",
        "blockType": "MOVE",
        "displayName": "MOVE",
        "stateful": false,
        "inputPorts": [
          {
            "id": "in",
            "name": "IN",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-sr",
        "blockType": "SR",
        "displayName": "Set/Reset",
        "stateful": true,
        "inputPorts": [
          {
            "id": "s",
            "name": "S",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          },
          {
            "id": "r",
            "name": "R",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-r-trig",
        "blockType": "R_TRIG",
        "displayName": "R_TRIG",
        "stateful": true,
        "inputPorts": [
          {
            "id": "in",
            "name": "IN",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-f-trig",
        "blockType": "F_TRIG",
        "displayName": "F_TRIG",
        "stateful": true,
        "inputPorts": [
          {
            "id": "in",
            "name": "IN",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-ctu",
        "blockType": "CTU",
        "displayName": "CTU",
        "stateful": true,
        "inputPorts": [
          {
            "id": "cu",
            "name": "CU",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          },
          {
            "id": "r",
            "name": "R",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-ctd",
        "blockType": "CTD",
        "displayName": "CTD",
        "stateful": true,
        "inputPorts": [
          {
            "id": "cd",
            "name": "CD",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          },
          {
            "id": "r",
            "name": "R",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-ctud",
        "blockType": "CTUD",
        "displayName": "CTUD",
        "stateful": true,
        "inputPorts": [
          {
            "id": "pulse",
            "name": "PULSE",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          },
          {
            "id": "dir",
            "name": "DIR",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          },
          {
            "id": "r",
            "name": "R",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-ton",
        "blockType": "TON",
        "displayName": "TON",
        "stateful": true,
        "inputPorts": [
          {
            "id": "in",
            "name": "IN",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-tof",
        "blockType": "TOF",
        "displayName": "TOF",
        "stateful": true,
        "inputPorts": [
          {
            "id": "in",
            "name": "IN",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-tp",
        "blockType": "TP",
        "displayName": "TP",
        "stateful": true,
        "inputPorts": [
          {
            "id": "in",
            "name": "IN",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-eq",
        "blockType": "EQ",
        "displayName": "Equal",
        "stateful": false,
        "inputPorts": [
          {
            "id": "in1",
            "name": "IN1",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          },
          {
            "id": "in2",
            "name": "IN2",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-ne",
        "blockType": "NE",
        "displayName": "Not Equal",
        "stateful": false,
        "inputPorts": [
          {
            "id": "in1",
            "name": "IN1",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          },
          {
            "id": "in2",
            "name": "IN2",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-gt",
        "blockType": "GT",
        "displayName": "Greater Than",
        "stateful": false,
        "inputPorts": [
          {
            "id": "in1",
            "name": "IN1",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          },
          {
            "id": "in2",
            "name": "IN2",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-gte",
        "blockType": "GTE",
        "displayName": "Greater or Equal",
        "stateful": false,
        "inputPorts": [
          {
            "id": "in1",
            "name": "IN1",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          },
          {
            "id": "in2",
            "name": "IN2",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-lt",
        "blockType": "LT",
        "displayName": "Less Than",
        "stateful": false,
        "inputPorts": [
          {
            "id": "in1",
            "name": "IN1",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          },
          {
            "id": "in2",
            "name": "IN2",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      },
      {
        "id": "def-lte",
        "blockType": "LTE",
        "displayName": "Less or Equal",
        "stateful": false,
        "inputPorts": [
          {
            "id": "in1",
            "name": "IN1",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          },
          {
            "id": "in2",
            "name": "IN2",
            "direction": "IN",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": 1
          }
        ],
        "outputPorts": [
          {
            "id": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL",
            "required": true,
            "maxConnections": null
          }
        ]
      }
    ],
    "nodes": [
      {
        "id": "comment-0001",
        "type": "comment",
        "position": {
          "x": 40,
          "y": -60
        },
        "data": {
          "text": "Пример к статье «Логика конвейера».\n\nУправление одним звеном конвейера:\nStart_Button запускает звено, Stop_Button останавливает, Safety_OK запрещает работу при аварии/отсутствии разрешения.\nProduct_Stop_Sensor временно запрещает Motor_Run, но не сбрасывает Conveyor_Enable.",
          "width": 780,
          "height": 180
        }
      },
      {
        "id": "comment-0002",
        "type": "comment",
        "position": {
          "x": 740,
          "y": 140
        },
        "data": {
          "text": "Логика варианта с автоматическим продолжением из раздела 9:\n\nConveyor_Enable = (Start_Button OR Conveyor_Enable) AND NOT Stop_Button AND Safety_OK\nMotor_Run = Conveyor_Enable AND NOT Product_Stop_Sensor\n\nВ графе память Conveyor_Enable реализована блоком RS с приоритетом Reset.",
          "width": 700,
          "height": 160
        }
      },
      {
        "id": "node-0001",
        "definitionId": "def-in",
        "label": "Start_Button",
        "position": {
          "x": 80,
          "y": 280
        },
        "ports": [
          {
            "id": "node-0001:q",
            "nodeId": "node-0001",
            "definitionPortId": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL"
          }
        ],
        "parameterValues": {}
      },
      {
        "id": "node-0002",
        "definitionId": "def-in",
        "label": "Stop_Button",
        "position": {
          "x": 80,
          "y": 420
        },
        "ports": [
          {
            "id": "node-0002:q",
            "nodeId": "node-0002",
            "definitionPortId": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL"
          }
        ],
        "parameterValues": {}
      },
      {
        "id": "node-0003",
        "definitionId": "def-in",
        "label": "Safety_OK",
        "position": {
          "x": 80,
          "y": 560
        },
        "ports": [
          {
            "id": "node-0003:q",
            "nodeId": "node-0003",
            "definitionPortId": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL"
          }
        ],
        "parameterValues": {}
      },
      {
        "id": "node-0004",
        "definitionId": "def-in",
        "label": "Product_Stop_Sensor",
        "position": {
          "x": 80,
          "y": 720
        },
        "ports": [
          {
            "id": "node-0004:q",
            "nodeId": "node-0004",
            "definitionPortId": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL"
          }
        ],
        "parameterValues": {}
      },
      {
        "id": "node-0005",
        "definitionId": "def-not",
        "label": "NOT Safety_OK",
        "position": {
          "x": 280,
          "y": 560
        },
        "ports": [
          {
            "id": "node-0005:in",
            "nodeId": "node-0005",
            "definitionPortId": "in",
            "name": "IN",
            "direction": "IN",
            "signalType": "BOOL"
          },
          {
            "id": "node-0005:q",
            "nodeId": "node-0005",
            "definitionPortId": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL"
          }
        ],
        "parameterValues": {}
      },
      {
        "id": "node-0006",
        "definitionId": "def-or",
        "label": "Reset_Request",
        "position": {
          "x": 440,
          "y": 440
        },
        "ports": [
          {
            "id": "node-0006:in1",
            "nodeId": "node-0006",
            "definitionPortId": "in1",
            "name": "IN1",
            "direction": "IN",
            "signalType": "BOOL"
          },
          {
            "id": "node-0006:in2",
            "nodeId": "node-0006",
            "definitionPortId": "in2",
            "name": "IN2",
            "direction": "IN",
            "signalType": "BOOL"
          },
          {
            "id": "node-0006:q",
            "nodeId": "node-0006",
            "definitionPortId": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL"
          }
        ],
        "parameterValues": {}
      },
      {
        "id": "node-0007",
        "definitionId": "def-rs",
        "label": "Conveyor_Enable_Latch",
        "position": {
          "x": 720,
          "y": 380
        },
        "ports": [
          {
            "id": "node-0007:r",
            "nodeId": "node-0007",
            "definitionPortId": "r",
            "name": "R",
            "direction": "IN",
            "signalType": "BOOL"
          },
          {
            "id": "node-0007:s",
            "nodeId": "node-0007",
            "definitionPortId": "s",
            "name": "S",
            "direction": "IN",
            "signalType": "BOOL"
          },
          {
            "id": "node-0007:q",
            "nodeId": "node-0007",
            "definitionPortId": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL"
          }
        ],
        "parameterValues": {}
      },
      {
        "id": "node-0009",
        "definitionId": "def-not",
        "label": "NOT Product_Stop_Sensor",
        "position": {
          "x": 420,
          "y": 720
        },
        "ports": [
          {
            "id": "node-0009:in",
            "nodeId": "node-0009",
            "definitionPortId": "in",
            "name": "IN",
            "direction": "IN",
            "signalType": "BOOL"
          },
          {
            "id": "node-0009:q",
            "nodeId": "node-0009",
            "definitionPortId": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL"
          }
        ],
        "parameterValues": {}
      },
      {
        "id": "node-0010",
        "definitionId": "def-and",
        "label": "Motor_Run_Logic",
        "position": {
          "x": 1220,
          "y": 540
        },
        "ports": [
          {
            "id": "node-0010:in1",
            "nodeId": "node-0010",
            "definitionPortId": "in1",
            "name": "IN1",
            "direction": "IN",
            "signalType": "BOOL"
          },
          {
            "id": "node-0010:in2",
            "nodeId": "node-0010",
            "definitionPortId": "in2",
            "name": "IN2",
            "direction": "IN",
            "signalType": "BOOL"
          },
          {
            "id": "node-0010:q",
            "nodeId": "node-0010",
            "definitionPortId": "q",
            "name": "Q",
            "direction": "OUT",
            "signalType": "BOOL"
          }
        ],
        "parameterValues": {}
      },
      {
        "id": "node-0011",
        "definitionId": "def-out",
        "label": "Motor_Run",
        "position": {
          "x": 1420,
          "y": 560
        },
        "ports": [
          {
            "id": "node-0011:in",
            "nodeId": "node-0011",
            "definitionPortId": "in",
            "name": "IN",
            "direction": "IN",
            "signalType": "BOOL"
          }
        ],
        "parameterValues": {}
      }
    ],
    "connections": [
      {
        "id": "edge-0001",
        "sourceNodeId": "node-0001",
        "sourcePortId": "node-0001:q",
        "targetNodeId": "node-0007",
        "targetPortId": "node-0007:s",
        "signalType": "BOOL"
      },
      {
        "id": "edge-0002",
        "sourceNodeId": "node-0002",
        "sourcePortId": "node-0002:q",
        "targetNodeId": "node-0006",
        "targetPortId": "node-0006:in1",
        "signalType": "BOOL"
      },
      {
        "id": "edge-0003",
        "sourceNodeId": "node-0003",
        "sourcePortId": "node-0003:q",
        "targetNodeId": "node-0005",
        "targetPortId": "node-0005:in",
        "signalType": "BOOL"
      },
      {
        "id": "edge-0004",
        "sourceNodeId": "node-0005",
        "sourcePortId": "node-0005:q",
        "targetNodeId": "node-0006",
        "targetPortId": "node-0006:in2",
        "signalType": "BOOL"
      },
      {
        "id": "edge-0005",
        "sourceNodeId": "node-0006",
        "sourcePortId": "node-0006:q",
        "targetNodeId": "node-0007",
        "targetPortId": "node-0007:r",
        "signalType": "BOOL"
      },
      {
        "id": "edge-0008",
        "sourceNodeId": "node-0004",
        "sourcePortId": "node-0004:q",
        "targetNodeId": "node-0009",
        "targetPortId": "node-0009:in",
        "signalType": "BOOL"
      },
      {
        "id": "edge-0009",
        "sourceNodeId": "node-0009",
        "sourcePortId": "node-0009:q",
        "targetNodeId": "node-0010",
        "targetPortId": "node-0010:in2",
        "signalType": "BOOL"
      },
      {
        "id": "edge-0010",
        "sourceNodeId": "node-0010",
        "sourcePortId": "node-0010:q",
        "targetNodeId": "node-0011",
        "targetPortId": "node-0011:in",
        "signalType": "BOOL"
      },
      {
        "id": "conn-0009",
        "sourceNodeId": "node-0007",
        "sourcePortId": "node-0007:q",
        "targetNodeId": "node-0010",
        "targetPortId": "node-0010:in1",
        "signalType": "BOOL"
      }
    ]
  }
}