Repository navigation
[hardware test]: S7-1500 CPU 1511F-1 PN V2.9.7, classic S7 — pass (13/13), rerun on master with order code #952
Copy link
Copy link
Closed
Description
Source revision
cf79c99 (master, includes #947): the rerun asked for in #909, after the runner fixes in #908. The report says "dirty": true only because of the runner's own untracked real-plc-results/ folder; git status showed no source change.
Overall result
pass
PLC family, model, and order code
S7-1500, CPU 1511F-1 PN (a fail-safe CPU), order code 6ES7 511-1FK02-0AB0, now recorded. The CPU returns it with a trailing space, as the JSON shows.
Firmware and security mode
V2.9.7, PUT/GET enabled (on for bench tests since 2026-10-04 and left on; not switched on for this run), non-optimized fixture DBs (DB1 read-only, DB2 scratch, checked in TIA before the write run). The safety program was not touched.
Host environment
Windows 11, AMD64, CPython 3.14.4; pytest-bdd 9.0.0, python-snap7 3.2.1
Run time (UTC)
2026-10-13T17:22:27Z to 17:22:30Z
Sanitized report artifacts
JSON report
{
"ended_at": "2026-10-13T17:22:30.245052+00:00",
"environment": {
"architecture": "AMD64",
"implementation": "CPython",
"os": "Windows",
"os_release": "11",
"pytest_bdd": "9.0.0",
"python": "3.14.4",
"python_snap7": "3.2.1"
},
"overall_result": "pass",
"plc": {
"cpu_state_status": "unavailable:S7ProtocolError",
"family": "S7-1500",
"firmware": "2.9.7",
"model": "CPU 1511F-1 PN",
"order_code": "6ES7 511-1FK02-0AB0 ",
"protocol_path": "classic_s7",
"rack": 0,
"security_mode": "PUT/GET, non-optimized fixture DBs",
"slot": 1,
"tia_configuration": ""
},
"scenarios": [
{
"diagnostic": null,
"duration_seconds": 0.20326419989578426,
"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.559683799976483,
"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.3078089999035001,
"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.06171800009906292,
"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.21099619986489415,
"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.04815730010159314,
"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.05611000000499189,
"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.046788099920377135,
"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.05870290007442236,
"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.04428720008581877,
"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.05608789995312691,
"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.06080980016849935,
"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.04419630020856857,
"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": "cf79c99ee2bef715cdd757289120d1015725b10a",
"dirty": true,
"kind": "git"
},
"started_at": "2026-10-13T17:22:27.708557+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.502" timestamp="2026-10-13T18:22:27.736556+01:00"><testcase classname="tests.real_plc.test_acceptance" name="test_establish_and_close_a_session" time="0.206" /><testcase classname="tests.real_plc.test_acceptance" name="test_read_the_canonical_fixture" time="0.561" /><testcase classname="tests.real_plc.test_acceptance" name="test_read_multiple_values_in_one_request" time="0.309" /><testcase classname="tests.real_plc.test_acceptance" name="test_reconnect_after_a_clean_disconnect" time="0.063" /><testcase classname="tests.real_plc.test_acceptance" name="test_repeated_operations_do_not_corrupt_the_session" time="0.212" /><testcase classname="tests.real_plc.test_acceptance" name="test_roundtrip_a_value_and_restore_the_plc[INT]" time="0.050" /><testcase classname="tests.real_plc.test_acceptance" name="test_roundtrip_a_value_and_restore_the_plc[REAL]" time="0.058" /><testcase classname="tests.real_plc.test_acceptance" name="test_roundtrip_a_value_and_restore_the_plc[BYTE]" time="0.048" /><testcase classname="tests.real_plc.test_acceptance" name="test_roundtrip_a_value_and_restore_the_plc[WORD]" time="0.060" /><testcase classname="tests.real_plc.test_acceptance" name="test_roundtrip_a_value_and_restore_the_plc[DWORD]" time="0.046" /><testcase classname="tests.real_plc.test_acceptance" name="test_roundtrip_a_value_and_restore_the_plc[DINT]" time="0.058" /><testcase classname="tests.real_plc.test_acceptance" name="test_roundtrip_a_value_and_restore_the_plc[CHAR]" time="0.062" /><testcase classname="tests.real_plc.test_acceptance" name="test_roundtrip_a_value_and_restore_the_plc[BOOL]" time="0.046" /></testsuite></testsuites>
Skips, failures, and notes
- 13/13 pass with
--allow-write(DB2 only), each value restored and read back.--allow-adminoff; the suite has no admin scenarios. cpu_state_statusisunavailable:S7ProtocolErroron master. [hardware test]: S7-1500 CPU 1511F-1 PN V2.9.7, classic S7 — pass (13/13) #909 readS7CpuStatusRunfrom the same CPU on 3.2.0. No scenario failed because of it. It may be a regression, perhaps from the request-header changes in fix: match real engineering-tool SZL read and continuation request layouts #942; we have not reproduced it.- The run was made on our bench by a colleague while I was away.
Safety confirmation
- I reviewed the attachments and they contain no PLC address, credentials, private keys, plant/site identifiers, or proprietary PLC program.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
gijzelaerr commentedon Oct 20, 2026
Recorded in the tested hardware table in #953. Thanks for the rerun.