Skip to content

[hardware test]: S7-1200 CPU 1212C V4.7.3, classic S7 — pass (13/13), rerun after #908 #919

Closed

Description

@russwing

Source revision

28bb2c8 (master, 2026-10-04)

Overall result

pass

PLC family, model, and order code

S7-1200, CPU 1212C; order code 6ES7 212-1BE40-0XB0, read by the runner

Firmware and security mode

V4.7.3, PUT/GET enabled, non-optimized fixture DBs (DB1 read-only, DB2 scratch)

Host environment

Python 3.11.2 (CPython), Linux x86_64; pytest-bdd 8.1.0, python-snap7 3.2.1; dependencies from uv sync --extra test

Run time (UTC)

2026-10-04T17:05:53Z (the scratch-write run; a read-only smoke run at 17:05:50Z also passed 5/5)

Sanitized report artifacts

JSON report
{
  "ended_at": "2026-10-04T17:05:55.408340+00:00",
  "environment": {
    "architecture": "x86_64",
    "implementation": "CPython",
    "os": "Linux",
    "os_release": "6.1.0-53-amd64",
    "pytest_bdd": "8.1.0",
    "python": "3.11.2",
    "python_snap7": "3.2.1"
  },
  "overall_result": "pass",
  "plc": {
    "cpu_state": "S7CpuStatusRun",
    "family": "S7-1200",
    "firmware": "4.7.3",
    "model": "CPU 1212C",
    "order_code": "6ES7 212-1BE40-0XB0 ",
    "protocol_path": "classic_s7",
    "rack": 0,
    "security_mode": "PUT/GET enabled, non-optimized fixture DBs",
    "slot": 1,
    "tia_configuration": ""
  },
  "scenarios": [
    {
      "diagnostic": null,
      "duration_seconds": 0.09529815788846463,
      "scenario_id": "tests/real_plc/test_acceptance.py::test_establish_and_close_a_session",
      "status": "passed",
      "tags": [
        "classic_s7",
        "real_plc",
        "smoke"
      ]
    },
    {
      "diagnostic": null,
      "duration_seconds": 0.18189957505092025,
      "scenario_id": "tests/real_plc/test_acceptance.py::test_read_the_canonical_fixture",
      "status": "passed",
      "tags": [
        "classic_s7",
        "real_plc",
        "smoke"
      ]
    },
    {
      "diagnostic": null,
      "duration_seconds": 0.15687081194482744,
      "scenario_id": "tests/real_plc/test_acceptance.py::test_read_multiple_values_in_one_request",
      "status": "passed",
      "tags": [
        "classic_s7",
        "real_plc",
        "smoke"
      ]
    },
    {
      "diagnostic": null,
      "duration_seconds": 0.16853883198928088,
      "scenario_id": "tests/real_plc/test_acceptance.py::test_reconnect_after_a_clean_disconnect",
      "status": "passed",
      "tags": [
        "classic_s7",
        "real_plc",
        "smoke"
      ]
    },
    {
      "diagnostic": null,
      "duration_seconds": 0.18978801602497697,
      "scenario_id": "tests/real_plc/test_acceptance.py::test_repeated_operations_do_not_corrupt_the_session",
      "status": "passed",
      "tags": [
        "classic_s7",
        "real_plc",
        "smoke"
      ]
    },
    {
      "diagnostic": null,
      "duration_seconds": 0.1343038659542799,
      "scenario_id": "tests/real_plc/test_acceptance.py::test_roundtrip_a_value_and_restore_the_plc[INT]",
      "status": "passed",
      "tags": [
        "classic_s7",
        "real_plc",
        "write"
      ]
    },
    {
      "diagnostic": null,
      "duration_seconds": 0.1339357029646635,
      "scenario_id": "tests/real_plc/test_acceptance.py::test_roundtrip_a_value_and_restore_the_plc[REAL]",
      "status": "passed",
      "tags": [
        "classic_s7",
        "real_plc",
        "write"
      ]
    },
    {
      "diagnostic": null,
      "duration_seconds": 0.13321368000470102,
      "scenario_id": "tests/real_plc/test_acceptance.py::test_roundtrip_a_value_and_restore_the_plc[BYTE]",
      "status": "passed",
      "tags": [
        "classic_s7",
        "real_plc",
        "write"
      ]
    },
    {
      "diagnostic": null,
      "duration_seconds": 0.13397326890844852,
      "scenario_id": "tests/real_plc/test_acceptance.py::test_roundtrip_a_value_and_restore_the_plc[WORD]",
      "status": "passed",
      "tags": [
        "classic_s7",
        "real_plc",
        "write"
      ]
    },
    {
      "diagnostic": null,
      "duration_seconds": 0.14829852001275867,
      "scenario_id": "tests/real_plc/test_acceptance.py::test_roundtrip_a_value_and_restore_the_plc[DWORD]",
      "status": "passed",
      "tags": [
        "classic_s7",
        "real_plc",
        "write"
      ]
    },
    {
      "diagnostic": null,
      "duration_seconds": 0.14464689197484404,
      "scenario_id": "tests/real_plc/test_acceptance.py::test_roundtrip_a_value_and_restore_the_plc[DINT]",
      "status": "passed",
      "tags": [
        "classic_s7",
        "real_plc",
        "write"
      ]
    },
    {
      "diagnostic": null,
      "duration_seconds": 0.13274372706655413,
      "scenario_id": "tests/real_plc/test_acceptance.py::test_roundtrip_a_value_and_restore_the_plc[CHAR]",
      "status": "passed",
      "tags": [
        "classic_s7",
        "real_plc",
        "write"
      ]
    },
    {
      "diagnostic": null,
      "duration_seconds": 0.13434770703315735,
      "scenario_id": "tests/real_plc/test_acceptance.py::test_roundtrip_a_value_and_restore_the_plc[BOOL]",
      "status": "passed",
      "tags": [
        "classic_s7",
        "real_plc",
        "write"
      ]
    }
  ],
  "schema_version": "1.0",
  "source": {
    "commit": "28bb2c89bde92795af76e61ecc201cf61c0f42b1",
    "dirty": false,
    "kind": "git"
  },
  "started_at": "2026-10-04T17:05:53.364712+00:00",
  "tester": "@russwing"
}
JUnit XML
<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="0" skipped="0" tests="13" time="2.040" timestamp="2026-10-04T17:05:53.367872+00:00"><testcase classname="tests.real_plc.test_acceptance" name="test_establish_and_close_a_session" time="0.096" /><testcase classname="tests.real_plc.test_acceptance" name="test_read_the_canonical_fixture" time="0.182" /><testcase classname="tests.real_plc.test_acceptance" name="test_read_multiple_values_in_one_request" time="0.157" /><testcase classname="tests.real_plc.test_acceptance" name="test_reconnect_after_a_clean_disconnect" time="0.169" /><testcase classname="tests.real_plc.test_acceptance" name="test_repeated_operations_do_not_corrupt_the_session" time="0.190" /><testcase classname="tests.real_plc.test_acceptance" name="test_roundtrip_a_value_and_restore_the_plc[INT]" time="0.135" /><testcase classname="tests.real_plc.test_acceptance" name="test_roundtrip_a_value_and_restore_the_plc[REAL]" time="0.135" /><testcase classname="tests.real_plc.test_acceptance" name="test_roundtrip_a_value_and_restore_the_plc[BYTE]" time="0.134" /><testcase classname="tests.real_plc.test_acceptance" name="test_roundtrip_a_value_and_restore_the_plc[WORD]" time="0.135" /><testcase classname="tests.real_plc.test_acceptance" name="test_roundtrip_a_value_and_restore_the_plc[DWORD]" time="0.149" /><testcase classname="tests.real_plc.test_acceptance" name="test_roundtrip_a_value_and_restore_the_plc[DINT]" time="0.145" /><testcase classname="tests.real_plc.test_acceptance" name="test_roundtrip_a_value_and_restore_the_plc[CHAR]" time="0.133" /><testcase classname="tests.real_plc.test_acceptance" name="test_roundtrip_a_value_and_restore_the_plc[BOOL]" time="0.135" /></testsuite></testsuites>

Skips, failures, and notes

Safety confirmation

  • I reviewed the attachments and they contain no PLC address, credentials, private keys, plant/site identifiers, or proprietary PLC program.

Activity

  1. added
    hardware-testStructured result from a real PLC acceptance run
    test-result: passAll selected applicable real-PLC scenarios passed
    on Oct 5, 2026
  2. gijzelaerr commented on Oct 13, 2026

    @gijzelaerr
    Owner

    Recorded in the new Tested and Verified Hardware section of the PLC support matrix (#947). Thanks for the runs!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    hardware-testStructured result from a real PLC acceptance runtest-result: passAll selected applicable real-PLC scenarios passed

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions