{
    "version": "1.7",
    "metadata": {
        "name": "laserjog",
        "created": "2026-04-02T23:45:47.491895056-04:00",
        "modified": "2026-04-02T23:45:47.492239592-04:00"
    },
    "programs": {
        "POU_LaserJog": {
            "source": "PROGRAM LaserJog\nVAR\n    state : INT := 0;\n    result : STRING;\n    delay_count : INT := 0;\n    DELAY_TICKS : INT := 30;\nEND_VAR\n\nCASE state OF\n    0: (* Home *)\n        result := HTTP_GET('http://201.234.3.1:8080/cmd?cmd=G28');\n        delay_count := 0;\n        state := 1;\n\n    1: (* Wait for move *)\n        delay_count := delay_count + 1;\n        IF delay_count >= DELAY_TICKS THEN\n            delay_count := 0;\n            state := 2;\n        END_IF;\n\n    2: (* Move to corner 1: X10 Y10 *)\n        result := HTTP_GET('http://201.234.3.1:8080/cmd?cmd=G0%20X10%20Y10%20F3000');\n        delay_count := 0;\n        state := 3;\n\n    3: (* Wait *)\n        delay_count := delay_count + 1;\n        IF delay_count >= DELAY_TICKS THEN\n            delay_count := 0;\n            state := 4;\n        END_IF;\n\n    4: (* Move to corner 2: X100 Y10 *)\n        result := HTTP_GET('http://201.234.3.1:8080/cmd?cmd=G0%20X100%20Y10%20F3000');\n        delay_count := 0;\n        state := 5;\n\n    5: (* Wait *)\n        delay_count := delay_count + 1;\n        IF delay_count >= DELAY_TICKS THEN\n            delay_count := 0;\n            state := 6;\n        END_IF;\n\n    6: (* Move to corner 3: X100 Y100 *)\n        result := HTTP_GET('http://201.234.3.1:8080/cmd?cmd=G0%20X100%20Y100%20F3000');\n        delay_count := 0;\n        state := 7;\n\n    7: (* Wait *)\n        delay_count := delay_count + 1;\n        IF delay_count >= DELAY_TICKS THEN\n            delay_count := 0;\n            state := 8;\n        END_IF;\n\n    8: (* Move to corner 4: X10 Y100 *)\n        result := HTTP_GET('http://201.234.3.1:8080/cmd?cmd=G0%20X10%20Y100%20F3000');\n        delay_count := 0;\n        state := 9;\n\n    9: (* Wait *)\n        delay_count := delay_count + 1;\n        IF delay_count >= DELAY_TICKS THEN\n            delay_count := 0;\n            state := 10;\n        END_IF;\n\n    10: (* Back to corner 1 to close the square *)\n        result := HTTP_GET('http://201.234.3.1:8080/cmd?cmd=G0%20X10%20Y10%20F3000');\n        delay_count := 0;\n        state := 11;\n\n    11: (* Wait *)\n        delay_count := delay_count + 1;\n        IF delay_count >= DELAY_TICKS THEN\n            delay_count := 0;\n            state := 12;\n        END_IF;\n\n    12: (* Home and stop *)\n        result := HTTP_GET('http://201.234.3.1:8080/cmd?cmd=G28');\n        state := 13;\n\n    13: (* Done - stay here *)\n        ;\n\nEND_CASE;\n\nEND_PROGRAM",
            "task": "LaserTask",
            "modified": "2026-04-02T23:45:47.491900443-04:00"
        }
    },
    "config_yaml": "tasks:\n    - name: LaserTask\n      priority: 10\n      programs:\n        - POU_LaserJog\n      scan_time_ms: 100\n      type: periodic\n      watchdog_ms: 200\n",
    "tasks": [
        {
            "name": "LaserTask",
            "type": "periodic",
            "priority": 10,
            "scan_time_ms": 100,
            "scan_time_us": 0,
            "programs": [
                "POU_LaserJog"
            ],
            "watchdog_ms": 200,
            "watchdog_fault": false,
            "watchdog_halt": false,
            "cpu_affinity": 0
        }
    ],
    "io_mapping": {
        "DiscreteInputs": null,
        "Coils": null,
        "InputRegisters": null,
        "HoldingRegisters": null,
        "MemoryWords": null
    },
    "protocols": {
        "Modbus": {
            "Enabled": false,
            "Port": 0
        },
        "ModbusMaster": {
            "Enabled": false,
            "Host": "",
            "Port": 0,
            "PollRate": 0
        },
        "ModbusServers": null,
        "ModbusClients": null,
        "S7": {
            "Enabled": false,
            "Port": 0,
            "IORegisters": 0
        },
        "S7Client": {
            "Enabled": false,
            "Host": "",
            "Port": 0,
            "Rack": 0,
            "Slot": 0,
            "PollRate": 0,
            "TimeoutMs": 0
        },
        "FINS": {
            "Enabled": false,
            "Host": "",
            "Port": 0,
            "DestNode": 0,
            "SrcNode": 0,
            "PollRate": 0
        },
        "ENIP": {
            "Enabled": false,
            "Port": 0,
            "Tags": null
        },
        "ENIPScanner": {
            "Enabled": false,
            "Host": "",
            "Port": 0,
            "Slot": 0,
            "PollRate": 0,
            "Tags": null
        },
        "DNP3": {
            "Enabled": false,
            "Port": 0,
            "IORegisters": 0
        },
        "DNP3Master": {
            "Enabled": false,
            "Host": "",
            "Port": 0,
            "LocalAddress": 0,
            "RemoteAddress": 0,
            "PollRate": 0
        },
        "OPCUA": {
            "Enabled": false,
            "Port": 0,
            "Endpoint": "",
            "IORegisters": 0
        },
        "OPCUAClient": {
            "Enabled": false,
            "Endpoint": "",
            "Policy": "",
            "Mode": "",
            "PollRate": 0
        },
        "IEC104": {
            "Enabled": false,
            "Port": 0,
            "CommonAddr": 0,
            "IORegisters": 0
        },
        "IEC104Client": {
            "Enabled": false,
            "Host": "",
            "Port": 0,
            "CommonAddr": 0
        },
        "BACnet": {
            "Enabled": false,
            "Port": 0,
            "DeviceID": 0,
            "DeviceName": "",
            "IORegisters": 0
        },
        "BACnetClient": {
            "Enabled": false,
            "Host": "",
            "Port": 0,
            "PollRate": 0
        },
        "SNMPAgent": {
            "Enabled": false,
            "Port": 0,
            "Community": ""
        },
        "SNMPClient": {
            "Enabled": false,
            "Host": "",
            "Port": 0,
            "Community": "",
            "Version": "",
            "PollRate": 0
        },
        "MQTT": {
            "Enabled": false,
            "Port": 0,
            "WSPort": 0
        },
        "MQTTClient": {
            "Enabled": false,
            "Broker": "",
            "ClientID": "",
            "Username": "",
            "Password": ""
        },
        "FINSServer": {
            "Enabled": false,
            "Port": 0,
            "Node": 0
        }
    }
}