{
  "schemaVersion": 1,
  "factsVersion": "2026-08-09.1",
  "reviewedAt": "2026-08-09",
  "product": {
    "name": "PLC Simulation Software",
    "url": "https://plcsimulationsoftware.com",
    "category": "Browser-based PLC learning and practice simulator",
    "freeTierAvailable": true,
    "creditCardRequiredForFreeAccount": false,
    "freeTierExpires": false
  },
  "curriculum": {
    "coreLessons": 12,
    "learningModules": 55,
    "quizzes": 12,
    "freeLessonsPerDialect": 6,
    "totalDialectLessons": 108
  },
  "guidedLabs": {
    "wiringLabs": 29,
    "faultFindingLabs": 19
  },
  "learningModel": {
    "scanCycle": [
      "read inputs",
      "execute the current valid program top-to-bottom",
      "update outputs",
      "advance the deterministic machine model"
    ],
    "validPartialProgramsRun": true,
    "warningsBlockPractice": false,
    "scenarioPassRequiresObservedBehavior": true,
    "tutorDefaultOutsideOnboarding": "off",
    "evidenceSurfaces": [
      "per-check scenario results",
      "timestamped learner completions",
      "cohort progress views",
      "portfolio PDF exports",
      "public certificate verification"
    ]
  },
  "vfdTraining": {
    "guidedCommissioningJobs": 5,
    "standaloneFunctionExperiments": 12,
    "synchronizedPresentations": [
      "2D process instrument",
      "3D device lab",
      "working keypad and measurements"
    ]
  },
  "dialects": [
    "IEC 61131-3",
    "Allen-Bradley",
    "Siemens SCL",
    "Mitsubishi",
    "Omron",
    "KEYENCE KV",
    "Schneider Unity",
    "Delta",
    "Instruction List"
  ],
  "interviewPrep": {
    "tracks": 6
  },
  "scenarioCatalog": {
    "sourceDefinitions": 141,
    "publishedRecords": 140,
    "freeTierRecords": 27,
    "publicLabel": "140 source-catalogued practice records",
    "anonymousTryPath": "/try",
    "accountRequiredForCatalogPlay": true,
    "availabilityNote": "The source registry and seeder define 140 scenario records marked published, plus the separate sandbox definition. The number visible to a visitor can be lower because access depends on account state, tier, entitlement and staged feature rollout. The no-account /try experience is a guided first program; catalog scenarios use an account."
  },
  "pricingUsd": {
    "basic": {
      "monthly": 12,
      "annual": 99
    },
    "pro": {
      "monthly": 29,
      "annual": 249
    },
    "teams": {
      "annualPerSeat": 199,
      "minimumSeats": 5,
      "monthlyOption": false
    }
  },
  "pricingNote": "Teams organisations are free to create. Managed Pro seats are billed annually at $199 per seat with a five-seat minimum; bulk and academic quotations are available.",
  "limitations": [
    "This is a learning and prototyping simulator, not a production PLC or a substitute for testing on the target controller and hardware.",
    "Vendor dialect support teaches transferable syntax and logic patterns; it does not emulate every instruction or firmware behavior of each vendor runtime.",
    "Scenario and lesson access varies by account state, plan, entitlement and staged feature rollout.",
    "Native vendor project-file export is not guaranteed."
  ],
  "provenance": [
    "resources/js/scenarios/_registry.ts",
    "database/seeders/ScenarioSeeder.php",
    "resources/js/lib/lessonTierPolicy.ts",
    "resources/js/data/dialect-capabilities.ts",
    "resources/js/data/lesson-tracks.ts",
    "config/learning-content.php",
    "resources/js/simulators/vfdCommissioning/functionCurriculum.ts",
    "resources/js/lib/scenarioHelp.ts",
    "resources/js/lib/plans.ts"
  ]
}
