8.16.2.2.3 Binary Counter, Freeze (revision 3.1r1, subset level 3)

Device under test: Step Function I/O dnp3 outstation

11:01:38.687 Running procedure: 8.16.2.2.3
11:01:38.689 This procedure is enabled because the following options:
11:01:38.689 - supports.frozenCounter == true
11:01:38.689 - supports.frozenCounterReads == true
11:01:38.689 step: 1
11:01:38.689 - Freeze(0x07) fir: 1 fin: 1 con: 0 uns: 0 seq: 0x01
11:01:38.689 - g20v0, All Objects
11:01:38.690 --A-> Freeze(0x07) fir: 1 fin: 1 con: 0 uns: 0 seq: 0x01
11:01:38.690 g20v0, All Objects
11:01:38.690 --T-> fir: 1 fin: 1 seq: 0
11:01:38.690 --L-> master: 1 pri: 1 fcb: 0 fcv: 0 func: UNCONFIRMED_USER_DATA(0x04) 0xC4 length: 11 dest: 1024 src: 1
11:01:38.690 --P-> 05 64 0B C4 00 04 01 00 CA 8A
11:01:38.690 C0 C1 07 14 00 06 7E E1
11:01:38.691 step: 2
11:01:38.691 - Read a single fragment response w/ sequence(0x01)
11:01:38.691 - Verify that the response is empty
11:01:38.691 - Verify that the IIN field does not contain bits IIN(ParamError, ObjectUnknown, FuncNotSupported)
11:01:38.691 <-P-- 05 64 0A 44 01 00 00 04 67 88
11:01:38.691 C0 C1 81 92 00 96 F5
11:01:38.691 <-L-- master: 0 pri: 1 fcb: 0 fcv: 0 func: UNCONFIRMED_USER_DATA(0x04) 0x44 length: 10 dest: 1 src: 1024
11:01:38.691 <-T-- fir: 1 fin: 1 seq: 0
11:01:38.691 <-A-- Response(0x81) fir: 1 fin: 1 con: 0 uns: 0 seq: 0x01 IIN(DeviceRestart, NeedTime, Class1Events)
11:01:38.691 step: 3
11:01:38.691 - Read(0x01) fir: 1 fin: 1 con: 0 uns: 0 seq: 0x02
11:01:38.691 - g23v0, All Objects
11:01:38.691 - g21v0, All Objects
11:01:38.691 --A-> Read(0x01) fir: 1 fin: 1 con: 0 uns: 0 seq: 0x02
11:01:38.691 g23v0, All Objects
11:01:38.691 g21v0, All Objects
11:01:38.691 --T-> fir: 1 fin: 1 seq: 0
11:01:38.691 --L-> master: 1 pri: 1 fcb: 0 fcv: 0 func: UNCONFIRMED_USER_DATA(0x04) 0xC4 length: 14 dest: 1024 src: 1
11:01:38.691 --P-> 05 64 0E C4 00 04 01 00 43 72
11:01:38.691 C0 C2 01 17 00 06 15 00 06 45 14
11:01:38.691 steps: 3.1 to 3.3
11:01:38.691 - Read any number of valid responses beginning w/ sequence(0x02) and incrementing by 1 modulo 16
11:01:38.691 - Verify that the response holds frozen counter events (g23v1 or g23v2, qualifier 0x17 or 0x28), followed by frozen counters (g21v1, g21v2, g21v9 or g21v10, qualifier 0x00 or 0x01), and nothing else
11:01:38.691 - Verify that each fragment followed by another, or carrying events, asks for an application layer confirmation.
11:01:38.691 - Verify that every point is reported in both objects, and that each point's latest event (g23) has the value of its frozen counter (g21)
11:01:38.691 - Verify that the response only contains objects, variations, and qualifiers specified in table 8-6
11:01:38.691 - Verify that the response contains objects
11:01:38.691 - Confirm each response that asks for a confirmation
11:01:38.691 <-P-- 05 64 7A 44 01 00 00 04 59 AF
11:01:38.691 C1 E2 81 90 00 17 01 28 0A 00 00 00 01 00 00 00 6F 68
11:01:38.691 00 01 00 01 00 00 00 00 02 00 01 00 00 00 00 03 FD 0D
11:01:38.691 00 01 00 00 00 00 04 00 01 00 00 00 00 05 00 01 F0 14
11:01:38.691 00 00 00 00 06 00 01 00 00 00 00 07 00 01 00 00 97 3C
11:01:38.691 00 00 08 00 01 00 00 00 00 09 00 01 00 00 00 00 67 B4
11:01:38.691 15 02 01 00 00 09 00 01 00 00 01 00 00 01 00 00 C7 5B
11:01:38.691 01 00 00 01 00 00 01 00 00 01 00 00 01 00 00 01 FE 85
11:01:38.691 00 00 01 00 00 47 E6
11:01:38.691 <-L-- master: 0 pri: 1 fcb: 0 fcv: 0 func: UNCONFIRMED_USER_DATA(0x04) 0x44 length: 122 dest: 1 src: 1024
11:01:38.691 <-T-- fir: 1 fin: 1 seq: 1
11:01:38.692 <-A-- Response(0x81) fir: 1 fin: 1 con: 1 uns: 0 seq: 0x02 IIN(DeviceRestart, NeedTime)
11:01:38.692 g23v1, 2-Byte Count and Index, count: 10
11:01:38.692 [0] - flags: 0x01 count: 0
11:01:38.692 [1] - flags: 0x01 count: 0
11:01:38.692 [2] - flags: 0x01 count: 0
11:01:38.692 [3] - flags: 0x01 count: 0
11:01:38.692 [4] - flags: 0x01 count: 0
11:01:38.692 [5] - flags: 0x01 count: 0
11:01:38.692 [6] - flags: 0x01 count: 0
11:01:38.692 [7] - flags: 0x01 count: 0
11:01:38.692 [8] - flags: 0x01 count: 0
11:01:38.692 [9] - flags: 0x01 count: 0
11:01:38.692 g21v2, 2-Byte Start/Stop, start: 0 stop: 9
11:01:38.692 [0] - flags: 0x01 count: 0
11:01:38.692 [1] - flags: 0x01 count: 0
11:01:38.692 [2] - flags: 0x01 count: 0
11:01:38.692 [3] - flags: 0x01 count: 0
11:01:38.692 [4] - flags: 0x01 count: 0
11:01:38.692 [5] - flags: 0x01 count: 0
11:01:38.692 [6] - flags: 0x01 count: 0
11:01:38.692 [7] - flags: 0x01 count: 0
11:01:38.692 [8] - flags: 0x01 count: 0
11:01:38.692 [9] - flags: 0x01 count: 0
11:01:38.692 --A-> Confirm(0x00) fir: 1 fin: 1 con: 0 uns: 0 seq: 0x02
11:01:38.692 --T-> fir: 1 fin: 1 seq: 0
11:01:38.692 --L-> master: 1 pri: 1 fcb: 0 fcv: 0 func: UNCONFIRMED_USER_DATA(0x04) 0xC4 length: 8 dest: 1024 src: 1
11:01:38.692 --P-> 05 64 08 C4 00 04 01 00 9A 19
11:01:38.692 C0 C2 00 D6 8D
11:01:38.695 step: 5
11:01:38.695 - Note the counters' current values, for a later check
11:01:38.695 [PLG] Recorded values:
11:01:38.695 [PLG] Updated Counter 0: value=0, flags=1, timestamp=0 (INVALID_TIME)
11:01:38.695 [PLG] Updated Counter 1: value=0, flags=1, timestamp=0 (INVALID_TIME)
11:01:38.695 [PLG] Updated Counter 2: value=0, flags=1, timestamp=0 (INVALID_TIME)
11:01:38.695 [PLG] Updated Counter 3: value=0, flags=1, timestamp=0 (INVALID_TIME)
11:01:38.695 [PLG] Updated Counter 4: value=0, flags=1, timestamp=0 (INVALID_TIME)
11:01:38.695 [PLG] Updated Counter 5: value=0, flags=1, timestamp=0 (INVALID_TIME)
11:01:38.695 [PLG] Updated Counter 6: value=0, flags=1, timestamp=0 (INVALID_TIME)
11:01:38.695 [PLG] Updated Counter 7: value=0, flags=1, timestamp=0 (INVALID_TIME)
11:01:38.695 [PLG] Updated Counter 8: value=0, flags=1, timestamp=0 (INVALID_TIME)
11:01:38.695 [PLG] Updated Counter 9: value=0, flags=1, timestamp=0 (INVALID_TIME)
11:01:38.695 step: 6
11:01:38.695 - Make every binary counter count up
11:01:38.695 [PLG] Updated Counter 0: value=1, flags=1, timestamp=1793185298695 (UNSYNCHRONIZED_TIME)
11:01:38.695 [PLG] Updated Counter 1: value=1, flags=1, timestamp=1793185298695 (UNSYNCHRONIZED_TIME)
11:01:38.695 [PLG] Updated Counter 2: value=1, flags=1, timestamp=1793185298695 (UNSYNCHRONIZED_TIME)
11:01:38.695 [PLG] Updated Counter 3: value=1, flags=1, timestamp=1793185298695 (UNSYNCHRONIZED_TIME)
11:01:38.695 [PLG] Updated Counter 4: value=1, flags=1, timestamp=1793185298695 (UNSYNCHRONIZED_TIME)
11:01:38.695 [PLG] Updated Counter 5: value=1, flags=1, timestamp=1793185298695 (UNSYNCHRONIZED_TIME)
11:01:38.695 [PLG] Updated Counter 6: value=1, flags=1, timestamp=1793185298695 (UNSYNCHRONIZED_TIME)
11:01:38.695 [PLG] Updated Counter 7: value=1, flags=1, timestamp=1793185298695 (UNSYNCHRONIZED_TIME)
11:01:38.695 [PLG] Updated Counter 8: value=1, flags=1, timestamp=1793185298695 (UNSYNCHRONIZED_TIME)
11:01:38.695 [PLG] Updated Counter 9: value=1, flags=1, timestamp=1793185298695 (UNSYNCHRONIZED_TIME)
11:01:38.695 step: 7
11:01:38.695 - Read(0x01) fir: 1 fin: 1 con: 0 uns: 0 seq: 0x03
11:01:38.695 - g21v0, All Objects
11:01:38.695 --A-> Read(0x01) fir: 1 fin: 1 con: 0 uns: 0 seq: 0x03
11:01:38.695 g21v0, All Objects
11:01:38.696 --T-> fir: 1 fin: 1 seq: 0
11:01:38.696 --L-> master: 1 pri: 1 fcb: 0 fcv: 0 func: UNCONFIRMED_USER_DATA(0x04) 0xC4 length: 11 dest: 1024 src: 1
11:01:38.696 --P-> 05 64 0B C4 00 04 01 00 CA 8A
11:01:38.696 C0 C3 01 15 00 06 48 AA
11:01:38.696 steps: 8 to 11
11:01:38.696 - Read any number of valid responses beginning w/ sequence(0x03) and incrementing by 1 modulo 16
11:01:38.696 - Verify that the response only contains objects, variations, and qualifiers specified in table 8-6
11:01:38.696 - Verify that the response contains objects
11:01:38.696 - Verify that the flags behave as the note on flags in Section 2 requires (Note 5 in 2.7, Note 6 in 3.1r1).
11:01:38.696 - Verify that each counter still equals its recorded value
11:01:38.696 - Confirm each response that asks for a confirmation
11:01:38.696 <-P-- 05 64 2F 44 01 00 00 04 6C 81
11:01:38.696 C2 C3 81 94 00 15 02 01 00 00 09 00 01 00 00 01 80 DD
11:01:38.696 00 00 01 00 00 01 00 00 01 00 00 01 00 00 01 00 DB 49
11:01:38.696 00 01 00 00 01 00 00 01 00 00 61 8D
11:01:38.696 <-L-- master: 0 pri: 1 fcb: 0 fcv: 0 func: UNCONFIRMED_USER_DATA(0x04) 0x44 length: 47 dest: 1 src: 1024
11:01:38.696 <-T-- fir: 1 fin: 1 seq: 2
11:01:38.696 <-A-- Response(0x81) fir: 1 fin: 1 con: 0 uns: 0 seq: 0x03 IIN(DeviceRestart, NeedTime, Class2Events)
11:01:38.696 g21v2, 2-Byte Start/Stop, start: 0 stop: 9
11:01:38.696 [0] - flags: 0x01 count: 0
11:01:38.696 [1] - flags: 0x01 count: 0
11:01:38.696 [2] - flags: 0x01 count: 0
11:01:38.696 [3] - flags: 0x01 count: 0
11:01:38.696 [4] - flags: 0x01 count: 0
11:01:38.696 [5] - flags: 0x01 count: 0
11:01:38.696 [6] - flags: 0x01 count: 0
11:01:38.696 [7] - flags: 0x01 count: 0
11:01:38.696 [8] - flags: 0x01 count: 0
11:01:38.696 [9] - flags: 0x01 count: 0
11:01:38.696 [PLG] Verified 10 counter point(s)
11:01:38.696 step: 12
11:01:38.696 - Freeze(0x07) fir: 1 fin: 1 con: 0 uns: 0 seq: 0x04
11:01:38.696 - g20v0, All Objects
11:01:38.696 --A-> Freeze(0x07) fir: 1 fin: 1 con: 0 uns: 0 seq: 0x04
11:01:38.696 g20v0, All Objects
11:01:38.697 --T-> fir: 1 fin: 1 seq: 0
11:01:38.697 --L-> master: 1 pri: 1 fcb: 0 fcv: 0 func: UNCONFIRMED_USER_DATA(0x04) 0xC4 length: 11 dest: 1024 src: 1
11:01:38.697 --P-> 05 64 0B C4 00 04 01 00 CA 8A
11:01:38.697 C0 C4 07 14 00 06 60 4E
11:01:38.697 step: 13
11:01:38.697 - Read a single fragment response w/ sequence(0x04)
11:01:38.697 - Verify that the response is empty
11:01:38.697 - Verify that the IIN field does not contain bits IIN(ParamError, ObjectUnknown, FuncNotSupported)
11:01:38.697 <-P-- 05 64 0A 44 01 00 00 04 67 88
11:01:38.697 C3 C4 81 96 00 95 B9
11:01:38.697 <-L-- master: 0 pri: 1 fcb: 0 fcv: 0 func: UNCONFIRMED_USER_DATA(0x04) 0x44 length: 10 dest: 1 src: 1024
11:01:38.697 <-T-- fir: 1 fin: 1 seq: 3
11:01:38.697 <-A-- Response(0x81) fir: 1 fin: 1 con: 0 uns: 0 seq: 0x04 IIN(DeviceRestart, NeedTime, Class2Events, Class1Events)
11:01:38.697 step: 14.1
11:01:38.697 - Read(0x01) fir: 1 fin: 1 con: 0 uns: 0 seq: 0x05
11:01:38.697 - g23v0, All Objects
11:01:38.697 - g21v0, All Objects
11:01:38.697 --A-> Read(0x01) fir: 1 fin: 1 con: 0 uns: 0 seq: 0x05
11:01:38.697 g23v0, All Objects
11:01:38.697 g21v0, All Objects
11:01:38.697 --T-> fir: 1 fin: 1 seq: 0
11:01:38.697 --L-> master: 1 pri: 1 fcb: 0 fcv: 0 func: UNCONFIRMED_USER_DATA(0x04) 0xC4 length: 14 dest: 1024 src: 1
11:01:38.697 --P-> 05 64 0E C4 00 04 01 00 43 72
11:01:38.697 C0 C5 01 17 00 06 15 00 06 3B 76
11:01:38.697 steps: 14.2 to 16
11:01:38.697 - Read any number of valid responses beginning w/ sequence(0x05) and incrementing by 1 modulo 16
11:01:38.697 - Verify that the response holds frozen counter events (g23v1 or g23v2, qualifier 0x17 or 0x28), followed by frozen counters (g21v1, g21v2, g21v9 or g21v10, qualifier 0x00 or 0x01), and nothing else
11:01:38.697 - Verify that each fragment followed by another, or carrying events, asks for an application layer confirmation.
11:01:38.697 - Verify that every point is reported in both objects, and that each point's latest event (g23) has the value of its frozen counter (g21)
11:01:38.697 - Verify that the response only contains objects, variations, and qualifiers specified in table 8-6
11:01:38.697 - Verify that the response contains objects
11:01:38.697 - Verify that each counter equals its recorded value plus the counts generated since that value was recorded
11:01:38.697 - Confirm each response that asks for a confirmation
11:01:38.697 <-P-- 05 64 7A 44 01 00 00 04 59 AF
11:01:38.697 C4 E5 81 94 00 17 01 28 0A 00 00 00 01 01 00 00 B6 31
11:01:38.697 00 01 00 01 01 00 00 00 02 00 01 01 00 00 00 03 1C C2
11:01:38.697 00 01 01 00 00 00 04 00 01 01 00 00 00 05 00 01 62 75
11:01:38.697 01 00 00 00 06 00 01 01 00 00 00 07 00 01 01 00 94 04
11:01:38.697 00 00 08 00 01 01 00 00 00 09 00 01 01 00 00 00 01 60
11:01:38.697 15 02 01 00 00 09 00 01 01 00 01 01 00 01 01 00 9D C5
11:01:38.697 01 01 00 01 01 00 01 01 00 01 01 00 01 01 00 01 9F 75
11:01:38.697 01 00 01 01 00 0F 6E
11:01:38.697 <-L-- master: 0 pri: 1 fcb: 0 fcv: 0 func: UNCONFIRMED_USER_DATA(0x04) 0x44 length: 122 dest: 1 src: 1024
11:01:38.697 <-T-- fir: 1 fin: 1 seq: 4
11:01:38.698 <-A-- Response(0x81) fir: 1 fin: 1 con: 1 uns: 0 seq: 0x05 IIN(DeviceRestart, NeedTime, Class2Events)
11:01:38.698 g23v1, 2-Byte Count and Index, count: 10
11:01:38.698 [0] - flags: 0x01 count: 1
11:01:38.698 [1] - flags: 0x01 count: 1
11:01:38.698 [2] - flags: 0x01 count: 1
11:01:38.698 [3] - flags: 0x01 count: 1
11:01:38.698 [4] - flags: 0x01 count: 1
11:01:38.698 [5] - flags: 0x01 count: 1
11:01:38.698 [6] - flags: 0x01 count: 1
11:01:38.698 [7] - flags: 0x01 count: 1
11:01:38.698 [8] - flags: 0x01 count: 1
11:01:38.698 [9] - flags: 0x01 count: 1
11:01:38.698 g21v2, 2-Byte Start/Stop, start: 0 stop: 9
11:01:38.698 [0] - flags: 0x01 count: 1
11:01:38.698 [1] - flags: 0x01 count: 1
11:01:38.698 [2] - flags: 0x01 count: 1
11:01:38.698 [3] - flags: 0x01 count: 1
11:01:38.698 [4] - flags: 0x01 count: 1
11:01:38.698 [5] - flags: 0x01 count: 1
11:01:38.698 [6] - flags: 0x01 count: 1
11:01:38.698 [7] - flags: 0x01 count: 1
11:01:38.698 [8] - flags: 0x01 count: 1
11:01:38.698 [9] - flags: 0x01 count: 1
11:01:38.698 --A-> Confirm(0x00) fir: 1 fin: 1 con: 0 uns: 0 seq: 0x05
11:01:38.698 --T-> fir: 1 fin: 1 seq: 0
11:01:38.698 --L-> master: 1 pri: 1 fcb: 0 fcv: 0 func: UNCONFIRMED_USER_DATA(0x04) 0xC4 length: 8 dest: 1024 src: 1
11:01:38.698 --P-> 05 64 08 C4 00 04 01 00 9A 19
11:01:38.698 C0 C5 00 B7 0A
11:01:38.698 [PLG] Verified 10 counter point(s)
11:01:38.698 Passed procedure: 8.16.2.2.3