f85fc8fbeb
- L2: WriteWidthRefusal leaves a BOOL over a wider value to a runtime that sees the CIP type (native): mistyped integer member -> BadTypeMismatch (as its read), 0xD3 BOOL-array DWORD -> BadNotSupported; libplctag keeps BadNotSupported for both (size only). - L4: direct theory over WriteWidthRefusal (1/2/4/8 widths incl LINT/ULINT/LREAL, String/Dt, unknown size) + array/bit-selector exemptions with a non-vacuous control. - L1: CLAUDE.md member/BIT-member writes are ab_server-proven only. - L3: patch 0003 blind spots documented (Docker README, AbServer-Test-Fixture.md); nits. Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
119 lines
3.8 KiB
YAML
119 lines
3.8 KiB
YAML
# AB CIP integration-test fixture — ab_server (libplctag).
|
|
#
|
|
# One service per family. All bind :44818 on the host; only one runs at a
|
|
# time. Commands mirror the CLI args AbServerProfile.cs constructs for the
|
|
# native-binary path.
|
|
#
|
|
# Usage:
|
|
# docker compose --profile controllogix up
|
|
# docker compose --profile compactlogix up
|
|
# docker compose --profile micro800 up
|
|
# docker compose --profile guardlogix up
|
|
services:
|
|
controllogix:
|
|
profiles: ["controllogix"]
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
image: otopcua-ab-server:libplctag-release
|
|
container_name: otopcua-ab-server-controllogix
|
|
restart: "no"
|
|
ports:
|
|
- "44818:44818"
|
|
# Pump_1_Speed, Line1_Count and Motor_Run are here for the controller-browse gate (Gitea #468) and
|
|
# are additive — the read/write suites key off the Test* tags above.
|
|
# The UdtSeg.* tags (Gitea #611) stand in for the members of a UDT tag `UdtSeg`
|
|
# (modelled on the Z-35162 press's UDT_TemperatureProfile_Segment): ab_server has
|
|
# no structures, so patch 0003 serves a member path (one CIP symbolic segment per
|
|
# member) from the flat tag whose --tag name is that dotted path. They exist for
|
|
# the discovered-member write suite (AbCipUdtMemberWriteTests); a bare `UdtSeg`
|
|
# read stays unknown, as does any member not listed here.
|
|
# Odd-length names are deliberate: Symbol Object entries are packed with no
|
|
# padding, so a name with an odd byte count puts every following entry on an
|
|
# odd offset. A decoder that assumes even alignment reads all six correctly
|
|
# and then loses everything after the first odd name.
|
|
command: [
|
|
"ab_server",
|
|
"--plc=ControlLogix",
|
|
"--path=1,0",
|
|
"--port=44818",
|
|
"--tag=TestDINT:DINT[1]",
|
|
"--tag=TestREAL:REAL[1]",
|
|
"--tag=TestBOOL:BOOL[1]",
|
|
"--tag=TestSINT:SINT[1]",
|
|
"--tag=TestString:STRING[1]",
|
|
"--tag=TestArray:DINT[16]",
|
|
"--tag=Pump_1_Speed:REAL[1]",
|
|
"--tag=Line1_Count:DINT[1]",
|
|
"--tag=Motor_Run:BOOL[1]",
|
|
"--tag=UdtSeg.ID:DINT[1]",
|
|
"--tag=UdtSeg.Enable:BOOL[1]",
|
|
"--tag=UdtSeg.Ready:BOOL[1]",
|
|
"--tag=UdtSeg.RampTime:REAL[1]",
|
|
"--tag=UdtSeg.Sub.Code:INT[1]",
|
|
"--tag=UdtSeg.Points:DINT[4]"
|
|
]
|
|
|
|
compactlogix:
|
|
profiles: ["compactlogix"]
|
|
image: otopcua-ab-server:libplctag-release
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
container_name: otopcua-ab-server-compactlogix
|
|
restart: "no"
|
|
ports:
|
|
- "44818:44818"
|
|
# ab_server doesn't distinguish CompactLogix from ControlLogix — no
|
|
# dedicated --plc mode. Driver-side ConnectionSize cap is enforced
|
|
# separately (see AbServerProfile.CompactLogix Notes).
|
|
command: [
|
|
"ab_server",
|
|
"--plc=ControlLogix",
|
|
"--path=1,0",
|
|
"--port=44818",
|
|
"--tag=TestDINT:DINT[1]",
|
|
"--tag=TestREAL:REAL[1]",
|
|
"--tag=TestBOOL:BOOL[1]"
|
|
]
|
|
|
|
micro800:
|
|
profiles: ["micro800"]
|
|
image: otopcua-ab-server:libplctag-release
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
container_name: otopcua-ab-server-micro800
|
|
restart: "no"
|
|
ports:
|
|
- "44818:44818"
|
|
# ab_server does have a Micro800 plc mode (unconnected-only, empty path).
|
|
command: [
|
|
"ab_server",
|
|
"--plc=Micro800",
|
|
"--port=44818",
|
|
"--tag=TestDINT:DINT[1]",
|
|
"--tag=TestREAL:REAL[1]"
|
|
]
|
|
|
|
guardlogix:
|
|
profiles: ["guardlogix"]
|
|
image: otopcua-ab-server:libplctag-release
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
container_name: otopcua-ab-server-guardlogix
|
|
restart: "no"
|
|
ports:
|
|
- "44818:44818"
|
|
# ab_server has no safety subsystem — _S suffix triggers driver-side
|
|
# classification only.
|
|
command: [
|
|
"ab_server",
|
|
"--plc=ControlLogix",
|
|
"--path=1,0",
|
|
"--port=44818",
|
|
"--tag=TestDINT:DINT[1]",
|
|
"--tag=SafetyDINT_S:DINT[1]"
|
|
]
|