Cip PCTSB
Cip PCTSB
PUB00166
October 2016
Disclaimer
Warranty Disclaimer Statement
Because CIP Networks may be applied in many diverse situations and in conjunction with
products and systems from multiple vendors, the user and those responsible for specifying CIP
Networks must determine for themselves its suitability for the intended use. The
Specifications are provided you on an AS IS basis without warranty. NO WARRANTIES,
EXPRESSED OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE BEING PROVIDED
BY ODVA. In no event shall ODVA, its officers, directors, members, agents, licensors or
affiliates be liable to you, any customer, or third party for lost profits, development expenses
or any other direct, indirect incidental, special or consequential damages.
References
CIP Networks Library, Volume 1, Common Industrial Protocol, Edition 3.21, November 2016, ©
2001 through 2016 by ODVA.
CIP Networks Library, Volume 2, EtherNet/IP Adaptation of CIP, Edition 1.22, November 2016,
© 1994 through 2016 by ODVA.
CIP Networks Library, Volume 3, DeviceNet Adaptation of CIP, Edition 1.14, November 2013,
© 1994 through 2016 by ODVA.
CIP, CIP Motion, CIP Safety, CIP Sync, CompoNet, ControlNet, DeviceNet, and EtherNet/IP are
trademarks of ODVA. Other trademarks are property of their respective owners
1. Introduction
1.0 Purpose
This CIP Conformance Test Specification was initially prepared using the CIP Specification,
Volume 1, Edition 2.2 and DeviceNet Specification Volume 3, Edition 1.1. Later revisions to the
test specification reflect the CIP Specifications in effect at the time of the revision. The most recent
revisions are cited in the References section (see page 2).
This document defines the following:
CIP protocol conformance criteria.
Individual tests used to demonstrate conformance with the CIP Specification.
Testing process used to demonstrate conformance with the CIP Specification.
This test specification should be referenced when developing products or defining a Quality Test
Plan (QTP) for products intended to comply with the CIP Specifications.
This document contains descriptions of CIP conformance tests and is intended to provide the overall
guidelines to verify that a device conforms to the CIP Specifications.
This document is not a step by step guide to conformance testing for specific devices. Not all tests
are applied to all products. The specific tests used to demonstrate that a device is compliant with the
CIP Specification depend on the device type and the CIP objects implemented. This document
provides the guidelines for determining which tests are applicable for a specific device.
The execution of conformance tests for a CIP device is expected to be done using an automated,
computer based, test system. This concept is basic throughout this document and there are
references to an automated process. This document provides a general description of the CIP
Conformance tests. This document is not intended as a test system design document and any
software implementation details of an automated test system are left to the implementers.
1.1 Audience
This document is intended for use by product engineers responsible for design, development and
testing of industrial automation devices using the CIP communications protocol as defined in the
CIP Specification. A good working knowledge of industrial automation technology is assumed. The
reader is expected to be thoroughly familiar with the concepts described in the CIP Specifications.
1.2 Document Scope
Tests described in this document provide a means of qualifying a product as being conformant.
They are neither designed nor intended to verify that product functional requirements have been
achieved. Tests described in this document may qualify a significant level of CIP functionality.
Conformance tests are intended to be used in addition to, not in place of, tests that verify product
functional, or system, performance. When the CIP Protocol conformance test can establish the state
or behavior of the device via the CIP network, that state or behavior is tested. If a state or behavior
can not be established or verified via the CIP network, that state or behavior must be verified by
product developer functional testing.
The specifics of device classification are best explained with an example. For instance, a Master
device, as defined in the CIP Specification, DeviceNet Volume 3, would be classified as both a
Group 2 Client and a Group 2 Only Client. From the given definitions, a Master device must
perform the following functions:
Take ownership of the Predefined Master/Slave Connection Sets within its Group 2 and
Group 2 Only Servers. This means that it must be able to communicate with these
connection sets. Since the I/O connections within the Predefined Master/Slave Connection Set
can be either Polled or Bit–Strobed, taking ownership of the Slave device implies that the
Master must be able to Poll and/or Strobe its Slaves.
Act as the UCMM port for its UCMM incapable Slaves.
Screen for all explicit messages bound for the Slaves it “owns” and re-route those messages
across the slaves Explicit Messaging connection.
In addition to performing these functions, a Master performs functions common to all devices, such
as the Network Access function. Therefore defining a device using CIP network terms defines
network visible functionality of the device.
2.1.2 Device Profile
Every CIP product should have a Device Profile. A Device Profile specifies the product object
model, the exact format of I/O data, and the public interface to the product configuration data. This
information fully defines device:
behavior.
I/O data communication.
configuration and how that configuration affects behavior.
The Device Profile contains the information necessary to integrate the device into the CIP
environment. To be in conformance with a particular Device Profile, the CIP device must have
implemented all required objects specified by the Device Profile. In addition, the device may only
have implemented objects contained in that Device Profile.
2.1.3 CIP Statement of Compliance
Since CIP products are modeled as a collection of objects, the CIP objects that are implemented in
the DUT must be identified for the conformance test. The specific implementation of the optional
attributes and services defined for each publicly accessible object must be specified. Given this
data, a conformance test can be structured to test these specific objects. The test can confirm that
object attributes and services specified in the product documentation have been implemented. In
addition, a conformance test can identify objects, attributes, and services not included in the product
documentation.
2.2 Test Identification
After device functionality is identified, the CIP conformance tests can be done. The following are
the main CIP conformance tests and a brief description of each. These tests are defined in detail in
chapters 3 and 4.
Network Access Test - Tests that the device executes the Network Access State Machine (a.k.a.
Duplicate MAC ID check) after resets and power cycles.
Transport Layer Test - Tests the functionality of the Transport Layer, or fragmentation state
machine, within the device under test.
Device Profile Verification - Tests that object classes implemented in a device are those, and
only those, listed in the Device Profile for the device.
Group 2 Server Poll/Bit Strobe Test - Verifies that a Group 2 Server (or a Group 2 Only
Server) correctly responds to the Poll and/or Bit Strobed I/O commands.
UCMM Connection Test - Tests the existence of the UCMM port and verifies that server,
client, or peer, devices perform the proper steps, in the proper sequence, when establishing
Explicit Messaging connections.
Object Class Tests - Tests support of attributes, services and adherence to specified behavior
for the public object classes implemented in the device under test. Descriptions of object class
tests are in chapter 4.
2.3 Test Reporting
Test reports shall provide documentary information including the date the conformance test is run,
the vendor name and identification number, device catalog number, revision number, and profile
name. For each object tested, the reports shall include the revision information for both the object
tested as well as the revision information for the object specific Testware. Test reports may be
presented in a Detailed or Summary format.
Reports shall state the pass/fail status and number of errors detected for each CIP technology test,
object test and for the device. The reports shall include the pass/fail status and the number of errors
detected for:
each sub-section of a technology and object test.
each technology and object test.
the complete device test.
Any failure is sufficient to cause the general result for the device to be fail or non-conformant.
2.3.1 Detailed Reports
Each relevant CIP message sent and received during the test is included in the report. To enhance
readability, redundant and unimportant messages are omitted. For example, access to attributes not
defined in the CIP specifications are executed, but omitted from the report, unless errors are
detected. The documentary and pass/fail information for the test is shown.
2.3.2 Summary Reports
The Summary report includes only the documentary and pass/fail information for the test. CIP
messages are not recorded unless failures are detected. Summary information for any message that
fails shall include both the request and response messages that caused the failure.
Step 1 is to verify that a Duplicate MAC ID request message is produced after a reset request.
Therefore, the test Procedure Definition for step 1 assumes that a Success_Response is received for
the Reset request. The Pass/Fail decision depends on the production of a Duplicate MAC ID request
message.
Step 2 is to verify that the device remains in the Off–Line state after the first Duplicate MAC ID
Request message is produced. This requires a series of tasks and messages. Therefore, the test
Procedure Definition for step 2 starts a timer local to the test, sends an Open Explicit Message
Connection request and an Allocate Predefined Master/Slave Connection request to the device. The
Pass/Fail decision depends on the test receiving no response to any messages.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Undefined(00) [Attribute_Not_Supported (x14)]
name of (01..99) expected response for each attribute 1..99, one per row
2) Instance attribute access rules test.
Note: Locate an instance of the object by requesting a Get_Attribute_Single, attribute 1, from
instance 1 through first instance found. Any response other than Object_Does_Not_Exist (0x16)
indicates an instance is found. Use found instance ID for any tests that require an instance.
Request a Get_Attribute_Single service (x0E) addressed to a valid instance to access attributes
00 - 99. Save the returned value for each Get_Attribute_Single request.
Pass: The expected response from table below for each Get_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined(00) [Attribute_Not_Supported (x14)]
name of (01..99) expected response for each attribute 1..99, one per row
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
For each attribute that has Set access, request a Set_Attribute_Single service that contains
incorrect, insufficient or superfluous data. Show the expected responses for a
Set_Attribute_Single error test.
Pass: Error_Response, Invalid_Attribute_Value (x09)
For each of the implemented Common and Object–specific Service, attempt to cause anomalous
behavior by sending incorrect, insufficient or superfluous data to the object. Show the expected
responses for a the error test.
Pass: Error_Response, Invalid_Parameter (x20)
6) Behavior Tests
Define the steps needed to test the behaviors
Pass: The expected responses for each behavior test.
Behavior tests for CIP conformance are done only for behavior observable and accessible from the
network. These are not functional behavior tests. Services that cause a significant change to the state
of the device, i.e. Reset, are tested in a controlled fashion in the Behavior section of the test.
Where possible, objects are tested in states that can be achieved and observed from the network. If
states of an object can be established from the network, i.e. external to the device in which the
object resides, then those states are established and the resulting behavior observed for conformance
to the CIP Specification. States that are defined for an object but are controlled internally by the
device must be tested by the device developer.
When information in the Implementation Notes section of the Object Definition document applies
to any behavior exhibited by the object that will be observable from the network, this section of the
test definition describes tests to demonstrate correct implementation of the behavior.
When a CIP general error code as an expected response, the complete Error_Response is
expected i.e. Service_Not_Supported (x08) means 94 08 FF.The following table shows how
expected responses to Get_Attribute_Single requests are presented.
Pass: The expected response for Get_Attribute_Single service from table below.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
Revision (01) [UINT(1), Attribute_Not_Supported]
Max_Instance (02) [UINT]
Data_Type (03) [USINT(1..3)]
Object_List (04) [(UINT, UINT[size]), Attribute_Not_Supported] size is first UINT
Bound_Instances (05) [USINT(0..255), Attribute_Not_Supported]
Binding (Class, Instance) List (06) [(UNIT, UINT)[Bound_Instances], Attribute_Not_Supported]
Pass: The expected response for Common Services from the table below.
Service Name (Code) [Expected Responses]
(00..04) [Service_Not_Supported (x08)]
Reset (05) [Success_Response]
(06..13) [Service_Not_Supported]
Get_Attribute_Single (14) [Success_Response requested value]
(14..99) [Service_Not_Supported]
(15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Service_Not_Supported]
(14..49) [Service_Not_Supported]
CIP Network-specific and CIP Safety related tests are documented separately:
CIP Conformance Test Specification: DeviceNet Adaptation (ODVA PUB00167)
CIP Conformance Test Specification: EtherNet/IP Adaptation (ODVA PUB00168)
CIP Conformance Test Specification: CIP Safety Adaptation (ODVA PUB00170)
Object Code For information about this Object Test: Go to this page:
x01 Identity 30
x02 Message Router 37
x03 DeviceNet PUB00167
x04 Assembly 41
x05 Connection 48
x06 Connection Manager 66
x07 Register 82
x08 Discrete Input Point 86
x09 Discrete Output Point 90
x0A Analog Input Point 98
x0B Analog Output Point 102
x0E Presence Sensing 111
x0F Parameter 115
x10 Parameter Group 123
x12 Group 128
x1D Discrete Input Group 132
x1E Discrete Output Group 136
x1F Discrete Group 144
x20 Analog Input Group 148
x21 Analog Output Group 152
x22 Analog Group 160
x23 Position Sensor 164
x24 Position Controller Supervisor 168
x25 Position Controller 174
x26 Block Sequencer 182
x27 Command Block 186
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
Note 1: For Safety Devices, See CIP Safety PCTS (ODVA PUB00170) for test procedures
3.2) Instance Implementation
Request each of the Common Services, 00 - 49, addressed to Instance ID 1.
Pass: The expected response from table below for each Common Service request.
Service Name (Code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
5) Error Tests.
5.1) Request a Reset service addressed to the class using data shown.
Reset, Instance ID 0, Type 2
Reset, Instance ID 0, Type 255
Pass: The expected response for Reset request from the table below.
Service Name (code) Implemented in Class NOT Implemented in Class
Reset (05), Type 2 [Invalid_Parameter (x20)] [Service_Not_Supported (x08)]
Reset (05), Type 255 [Invalid_Parameter] [Service_Not_Supported]
5.2) Request a Reset service addressed to the class using data shown.
Reset, Instance ID 1, Type 2
Reset, Instance ID 1, Type 255
Pass: The expected response for Reset request from the table below.
Service Name (code) [Expected Responses]
Reset (05), type 2 [Invalid_Parameter (x20)]
Reset (05), type 255 [Invalid_Parameter]
Note: Return Error_Response 94 10 ff, Device State Conflict, if unable to accept request.
If a Success_Response is returned, request a Get_Attribute_Single service, Status attribute.
Pass: Success_Response with a valid Status attribute (no reserved bits set).
After a Type 0 Reset, check if the device still accepts EM request 3 seconds after the successful
Reset response.
Pass: The DUT stops responding EM request 3 seconds after sending Reset success.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Note 1: a manual test procedure is required for validation of this service. Currently, the
PUB00166 www.odva.org Page 38 of 344
CIP Object Tests
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each of the Reserved Services, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests
The MR.2.E Request Path Error Tests modify bytes in a valid request path for a Forward Open
request to make it invalid.
6) Behavior Tests.
NOTE: Message Router Behavior is tested indirectly throughout the conformance tests.
Delete the connections at the conclusion of this test and leave the device in the On–Line state.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses] Dynamic Assembly
Undefined (00) [Attribute_Not_Supported (x14)]
Num_Members (01) [Attribute_Not_Settable (x0E)]
Member_List (02) [Attribute_Not_Settable] Add_Member Implemented
[Success_Response] Add_Member Not Implemented
Data (03) [Success_Response]
Undefined (04..99) [Attribute_Not_Supported]
Note: If Member_List is implemented, the Member Data Description can be used to interpret the
Data array. Otherwise, this information must be Supplied by the vendor.
3) Common Services Test
Request each of the Common Services 00 - 49 addressed to the class, Instance ID zero.
Note: Delete the instance ID returned by the Create Service.
Pass: The expected response from table below for each Common Services request.
Service Name (Code) [Expected Responses]
(00..07) [Service_Not_Supported (x08)]
Create (08) [UINT (1..65535)] Dynamic Assembly
[Service_Not_Supported] Static Assembly
Delete (09) [Service_Not_Supported] Static Assembly
(10..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value]
[Service_Not_Supported] if no attributes are supported
(15..49) [Service_Not_Supported]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Services request.
Service Name (Code) [Expected Responses]
(00..08) [Service_Not_Supported (x08)]
Delete (09) For Dynamic Assembly [Success_Response]
For Static Assembly [Service_Not_Supported]
(10..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) For Dynamic Assembly [Success_Response]
For Static Assembly [Service_Not_Supported]
Reserved (17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
For Assemblies that do not support the Add_Member and Delete_Member services, request
each Object–specific Service, 75 - 99, addressed to a valid Instance ID.
Pass: The expected response from table below for each Object–specific Service request.
Service Name (Code) [Expected Responses]
Object–specific Codes (75..99) [Service_Not_Supported (x08)]
For Dynamic Assemblies that support the Add_Member and Delete_Member services, request
each Object–specific Service, 77 - 99, addressed to a valid Instance ID.
Pass: The expected response from table below for each Object–specific Service request.
Service Name (Code) [Expected Responses]
Object–specific Codes (77..99) [Service_Not_Supported (x08)]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
5.1) Set Data with Invalid sizes. This test applies if the Data attribute is settable.
Request a Set_Attribute_Single, Data, size of data too small.
Pass: Success_Response, or Error_Response = 94 13 00, Not_Enough_Data
Request a Set_Attribute_Single, Data, size of data too large.
Pass: Error_Response = 94 15 00 , Too_Much_Data
6) Behavior tests.
6.0) Profile Verification Tests
Each Assembly Instance is verified according to the definition of that instance from the Device
Profile. Each Assembly Instance must adhere to the Device Profile definiton for:
Instance Id, or must be Vendor Specific Id.
The correct type, input, output, or configuration.
7.0) Error tests for Add_Member service. Use Assembly created in step 6.2
7.1) Invalid Member_Location test.
Request an Add_Member service using;
Member_Location = Num_Members + 2
Member_Description = Valid member data for the input/output assembly attribute data.
Pass: Error_Response = 94 20 FF , Invalid_Parameter
State: Established
1.1)
Open/Allocate an Explicit Messaging (EM) connection. Use the following arguments when
creating a connection via the UCMM: Message_Body_Format = 0, Group_Select = a supported
group, Message Id as appropriate for the chosen Group_Select.
Request a Set_Attribute_Single, Expected_Packet_Rate, value = zero.
Request a Get_Attribute_Single, State.
Pass: State = Established
Request a Get_Attribute_Single service (x0E) addressed to the EM connection instance to
access attributes 00 - 99. Save the returned value of each Get_Attribute_Single request.
Pass: The expected response from table below for each Get_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
State (01) [USINT (3)]
Instance_Type (02) [USINT (0)]
TransportClass_Trigger (03) [USINT (0..255)]
Produced_Connection_Id (04) [UINT (x0000..x07F0)]
Consumed_Connection_Id (05) [UINT (x0000..x07F0)]
Initial_Comm_Characteristics (06) [USINT Two nibbles each of value 0..3]
Produced_Connection_Size (07) [UINT ]
Consumed_Connection_Size (08) [UINT ]
Expected_Packet_Rate (09) [UINT (2500 or greater depending on timer tick value)]
Reserved (10, 11) [Attribute_Not_Supported]
Watchdog_Timeout_Action (12) [USINT (1)]
Produced_Connection_Path_Length (13) [UINT ]
Produced_Connection_Path (14) [EPATH]
Consumed_Connection_Path_Length(15) [UINT ]
Consumed_Connection_Path (16) [EPATH]
Production_Inhibit_Time (17) [UINT (0), Attribute_Not_Supported]
Connection_Timeout_Multiplier (18) [USINT (0), Attribute_Not_Supported]
Connection_Binding_List (19) [UINT(size),UINT[size], Attribute_Not_Supported]
Undefined (20..99) [Attribute_Not_Supported]
Request Set_Attribute_Single for the I/O connection instance to access attributes 00 - 99. Use
data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
State (01) [Attribute_Not_Settable (x0E)]
Instance_Type (02) [Attribute_Not_Settable]
TransportClass_Trigger (03) [Success_Response, Attribute_Not_Settable]
Produced_Connection_Id (04) [Success_Response, Attribute_Not_Settable]
Consumed_Connection_Id (05) [Success_Response, Attribute_Not_Settable]
Initial_Comm_Characteristics (06) [Success_Response, Attribute_Not_Settable]
Produced_Connection_Size (07) [Success_Response, Attribute_Not_Settable]
Consumed_Connection_Size (08) [Success_Response, Attribute_Not_Settable]
Expected_Packet_Rate (09) [Success_Response with EPR value (UINT), Attribute_Not_Settable]
Reserved (10, 11) [Attribute_Not_Supported]
Watchdog_Timeout_Action (12) [Success_Response, Attribute_Not_Settable]
Produced_Connection_Path_Length (13) [Attribute_Not_Settable]
Produced_Connection_Path (14) [Success_Response, Attribute_Not_Settable]
Consumed_Connection_Path_Length (15) [Attribute_Not_Settable]
Consumed_Connection_Path (16) [Success_Response, Attribute_Not_Settable]
Production_Inhibit_time (17) [Success_Response with PIT value (UINT), Attribute_Not_Supported]
Connection_Timeout_Multiplier (18) [Success_Response, Attribute_Not_Supported]
Connection_Binding_List (19) [UINT(size),UINT[size], Attribute_Not_Supported]
Undefined (20..99) [Attribute_Not_Supported]
State: Waiting_for_Connection_ID
2.10)
Send a Delete request to the I/O connection.
Pass: Success_Response
Send a Get_Attribute_Single request to the State attribute.
Pass: Error_Response: 94 16 FF, Object_Does_Not_Exist
Recreate, configure and Apply the I/O connection to continue the test.
Send a Get_Attribute_Single request to the State attribute.
Pass: state = Waiting_for_Connection_ID
2.11)
Request Get_Attribute_Single for the I/O connection instance to access attributes 00 - 99.
Pass: The expected response from table below for each Get_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
State (01) [USINT (2)]
Instance_Type (02) [USINT (1)]
TransportClass_Trigger (03) [USINT (0..255)]
Produced_Connection_Id (04) [UINT (xFFFF)]
Consumed_Connection_Id (05) [UINT (xFFFF)]
Initial_Comm_Characteristics (06) [USINT Two nibbles each = 0..3 or xF]
Produced_Connection_Size (07) [UINT ]
Consumed_Connection_Size (08) [UINT ]
Expected_Packet_Rate (09) [UINT ]
Reserved (10, 11) [Attribute_Not_Supported]
Watchdog_Timeout_Action (12) [USINT 0..2]
Produced_Connection_Path_Length (13) [UINT ]
Produced_Connection_Path (14) [EPATH]
Consumed_Connection_Path_Length (15) [UINT ]
Consumed_Connection_Path (16) [EPATH]
Production_Inhibit_Time (17) [UINT (0)]
Connection_Timeout_Multiplier (18) [USINT (0), Attribute_Not_Supported]
Connection_Binding_List (19) [UINT(size),UINT[size], Attribute_Not_Supported]
Undefined (20..99) [Attribute_Not_Supported]
Request Set_Attribute_Single for the I/O connection instance to access attributes 00-99. Use
data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Get_Attribute_Single request.
Note: Object_State_Conflict (x0C) is expected when the attribute is not settable in the current
state and is settable in another state.
Attribute Name (ID) [Expected Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
State (01) [Attribute_Not_Settable (x0E)]
State: Established
2.15)
Send a Delete request to the I/O connection.
Pass: The expected response from table below for Delete request.
Request Set_Attribute_Single for the I/O connection instance to access attributes 00 - 99. Use
data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Note: Object_State_Conflict (x0C) is expected when the attribute is not settable in the current
state and is settable in another state.
2.25)
Send a Delete request to the I/O connection.
Pass: The expected response from table below for Delete request.
If Delete is Implemented If Delete is not Implemented
[Success_Response] [Service_Not_Supported]
Set a test timer for (Actual EPR * 4) + 100 milliseconds and wait for the test timer to expire.
Send a Get_Attribute_Single request to the State attribute.
Pass: state = Established
2.26.2) WatchDog_Timeout_Action, Auto_Delete
Request a Set_Attribute_Single, WatchDog_Timeout_Action, value = Auto_Delete
If the response is Success_Response, complete this test. Otherwise, go to Part 3.
Reset/Allocate an I/O connection, if necessary, Create and configure the connection.
Request a Set_Attribute_Single, Expected_Packet_Rate, value = .25 second.
Set a test timer for (EPR * 4) + 100 milliseconds and wait for the test timer to expire.
Send a Get_Attribute_Single request to the State attribute.
Pass: state = Non–existent, or Error_Response 94 16 FF, Object_Does_Not_Exist
Pass: state = Established, for Producing only client connections.
2.27) Check Production Inhibit <= EPR at Apply
Create/Allocate an I/O connection, if necessary, configure the connection.
Request a Set_Attribute_Single, Production_Inhibit_Timer, value = 2 seconds.
Request a Set_Attribute_Single, Expected_Packet_Rate, value = 1 second.
If necessary, request Apply_Attributes.
Pass: Error_Response 94 09 11, Invalid_Attribute_Value, Production_Inhibit_Timer
Pass: The expected response from table below for each Get_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Service_Not_Supported (x08), Attribute_Not_Supported (x14)]
Revision (01) [UINT (1), Service_Not_Supported, Attribute_Not_Supported]
Max_Instance (02) [UINT (1..65535), Service_Not_Supported, Attribute_Not_Supported]
Num_Instances (03) [UINT (1..65535), Service_Not_Supported, Attribute_Not_Supported]
Optional_Attribute_List (04) [(UINT, UINT[size]), Service_Not_Supported, Attribute_Not_Supported]
Optional_Service_List (05) [(UINT, UINT[size]), Service_Not_Supported, Attribute_Not_Supported]
Max_Class_Attribute_Id (06) [UINT (1..199), Service_Not_Supported, Attribute_Not_Supported]
Max_Instance_Attribute_Id (07) [UINT (16..199), Service_Not_Supported, Attribute_Not_Supported]
Max_Instance_Attribute_Id (07) [UINT (16..199), Service_Not_Supported, Attribute_Not_Supported]
Connection_Request_Error_Count (08) [Service_Not_Supported, Attribute_Not_Supported] Note 1
Safety_Connection_Counters (09) [Service_Not_Supported, Attribute_Not_Supported] Note 1
Undefined (10..99) [Service_Not_Supported, Attribute_Not_Supported]
Note 1: For Safety Devices, See CIP Safety PCTS (ODVA PUB00170) for test procedures
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00-99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Procedure Definition
Initialization
The Connection Manager object must be available. Log the object name and object test revision.
Message Connection
Establish an Explicit Messaging Connection. Set the EPR = 0.
1) Class attribute access rules test.
Request a Get_Attribute_Single service (x0E) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Save the returned value for each Get_Attribute_Single request.
Pass: The expected response from table below for each Get_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Service_Not_Supported (x08), Attribute_Not_Supported (x14)]
Revision (01) [UINT (1), Service_Not_Supported, Attribute_Not_Supported]
Max_Instance (02) [UINT (1..65535), Service_Not_Supported, Attribute_Not_Supported]
Num_Instances (03) [UINT , Service_Not_Supported, Attribute_Not_Supported]
Optional_Attribute_List (04) [(UINT, UINT[size]), Service_Not_Supported, Attribute_Not_Supported]
Optional_Service_List (05) [(UINT, UINT[size]), Service_Not_Supported, Attribute_Not_Supported]
Max_Class_Attributes (06) [UINT (1..199), Service_Not_Supported, Attribute_Not_Supported]
Max_Instance_Attributes (07) [UINT (1..199), Service_Not_Supported, Attribute_Not_Supported]
Undefined (08..99) [Service_Not_Supported, Attribute_Not_Supported]
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Request a Set_Attribute_Single service (x10) addressed to a valid instance to access attributes 00 - 99.
Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Undefined (00) [Service_Not_Supported (x08), Attribute_Not_Supported (x14)]
Open Requests (01) [Service_Not_Supported, Invalid_Attribute_Value (x09), Success]
Open Format Rejects (02) [Service_Not_Supported, Invalid_Attribute_Value (x09), Success]
Open Resource Rejects (03) [Service_Not_Supported, Invalid_Attribute_Value (x09), Success]
Open Other Rejects (04) [Service_Not_Supported, Invalid_Attribute_Value (x09), Success]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
Get_Attribute_All (01) [all attribute values, Service_Not_Supported]
(02..13) [Service_Not_Supported (x08)]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Attribute_Not_Settable (x0E)]
Reserved (17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
None
6) Behavior tests.
6.1) Forward Close
Run this test to both Class 1 (if supported) and Class 3 connection.
For Class 1 connection, it sends ForwardOpen with optional SockAddr Info items in both O->T
and T->O direction and the sin_addr is set to an invalid IP address.
Pass: The device can handle these optional items correctly and open the connection
successfully.
Fail: The DUT refuses to open connection due to these optional SockAddrInfo items.
1
NOTE: for all SMALL Major and Minor revision variation tests: the test shall be performed ONLY IF the
corresponding actual value in the Device Under Test is greater than one (1).
“The Network Connection ID shall not be reused until the connection has been closed or has
timed out. When a device restarts, it shall not reuse Network Connection IDs from previously
opened connections until those connections have been closed or have timed out. A specific
connection ID shall not be reused so long as there is the possibility that packets with that
connection ID are present in the network.” [Vol 2 Ed 1.17 3-3.7.1.1]
Two STC-defined connections are preferred: a point-to-point output connection and a multicast
input connection.. If only one connection is available, it will be used for both test cases if T->O
supports both point-to-point and multicast.
For the multicast case, both T->O and O->T Connection IDs are checked for non-reuse. For point-
to-point case, only the O->T Connection ID is checked.
For each case, the test establishes an I/O connection and then performs a device reset; the user is
prompted to power-cycle the device if the reset cannot be performed. After the reset wait time, the
test attempts to open the same connection again. The Connection IDs determined by the target {see
Vol 2 Ed 1.17 Table 3-3.2) should be different.
NOTE: This test assumes that the DUT uses a strategy similar to the Incarnation or Pseudo-
Random techniques presented as informative material in Volume 2. Other techniques may also be
determined to be effective that the current test cannot validate. Manual demonstration that the 3-
3.7.1.1 requirement cited above is met will allow a failure of this test to be waived.
6.3.5) T->O Multicast Matching Rules test on the same network interface
a) T->O RPI mismatch test:
i. Open a multicast Class 1 I/O connection
ii. When above connection starts generating multicast I/O, open another multicast to the
same port with the exactly same parameters except different T->O RPI.
Pass: The DUT returns General Status 0x01, Extended Status 0x0112.
Fail: Other responses
iii. Close opened connection(s).
g) T->O Production Inhibit Time mismatch test if the DUT supports COS Production Trigger
type:
i.Open a multicast Class 1 I/O connection
ii. When above connection starts generating multicast I/O, open another multicast to the
same port with the exactly same parameters except different Production Inhibit Time.
Pass: The DUT returns General Status 0x01 and Extended Status 0x0139.
Fail: Other responses
iii. Close opened connection(s).
6.4) GetConnectedData
There is no test for this service.
6.5) GetConnectionOwner
There is no test for this service.
GetConnectionOwner
There is no test for this service.
Pass: The Class 3 connection shall be timed out and no response shall be returned.
If either the T->O or O->T connection size (including sequence count and header bytes, if
applicable) is greater than 511 bytes, then LargeForwardOpen shall be used to establish the
connections.
For any SockAddr Info item present in Forward_Open response, verify sin_family = AF_INET.
ii. Send I/O messages to the DUT until the first I/O message is received from the DUT.
The O->T I/O message Sequence Number starts with 0xFFFFFFFE.
iii. After serveral O->T cycles, do a Sequence Number jump with gap > 16
iv. Continue sending I/O messages to the DUT with incrementing Sequence Number by 1.
Pass: The T->O connection remains open and produces data.
Fail: The T->O connection finally times out (Connection Timeout Multiplier * RPI).
ii. Send I/O messages to the DUT and increament the Encapsulation Sequence Number
with one in each message until the first I/O message is received from the DUT
iii. Continue sending I/O messages to the DUT without incrementing the Encapsulation
Sequence Number.
Pass: The T->O connection times out (after Connection Timeout Multiplier * RPI).
Fail: The T->O connection remains open and produces data.
iv. Create a TCP connection to the device, create a session and issue a ForwardClose for
the I/O connection.
This test verifies the the following statement in Vol 2 Ed 1.21 section 3-3.9.6:
“If the point-point consumer chooses a port number that is different than 0x08AE, then the
point-point consumer shall send a Sockaddr Info item indicating the chosen port number.”
i. Open an I/O connection with Point-Point T->O on a UDP port other than 2222.
Fail: The DUT is unable to open the connection on the requested port.
ii. Continuously receive T->O I/O for 10 second on the selected port.
Pass: The DUT generates I/O on the selected port.
Fail: The DUT does not generate I/O or still generate I/O on the default port 2222.
iii.Close the I/O connection.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (code) [Expected Responses]
(00..13) [Service_Not_Supported (x08)]
Get_Attribute_Single (14) [requested value]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5.4) If Default Size is greater than 8 bits, Set Data Error Invalid sizes, Size = default
Set_Attribute_Single, Data = Data value saved from step 2 - 1 byte.
Pass: Error_Response 94 13 FF, Not_Enough_Data.
Set_Attribute_Single, Data = Data value saved from step 2 + 1 byte ( = x00).
Pass: Error_Response 94 15 FF, Too_Much_Data.
5.5) Set Data when Direction = 0
Set_Attribute_Single, Direction = 0.
Set_Attribute_Single, Data = Data value saved from step 2.
Pass: Error_Response 94 0E FF, Attribute_Not_Settable.
6) Behavior tests. If Size is not settable, skip the Behavior test.
If Direction is settable, Set_Attribute_Single, Direction = 1.
6.1) Set Data Attribute less than default Size
Set_Attribute_Single, Size = (default - 8), result Size must be > 0
Set_Attribute_Single, Data = x55 for each byte, (Size - 8).
Get_Attribute_Single, Data.
Pass: Data = value from the Set_Attribute_Single request.
6.2) Set Data Attribute more than default Size
Set_Attribute_Single, Size = (default + 8), result Size must be < 65535
Set_Attribute_Single, Data = x55 for each byte, (Size + 8).
Pass: Success_Response, or 94 15 FF, Too_Much_Data.
Get_Attribute_Single, Data.
Pass: Data = value from the last successful Set_Attribute_Single request.
6.3) Set Attributes back to default values saved from step 2.
Use Get_Attribute_Single to read each of the four attributes.
Pass: Each value must be the same as the original value.
6.4) Check Data for RF or DC Power Generator.
Get_Attribute_Single, Instance 1, Size.
Pass: Size = 8 (bits)
Get_Attribute_Single, Instance 1, Data.
Pass: No data in reserved bits 5, 6, 7 (or 3 for RF Power Generator)
Get_Attribute_Single, Instance 2, Size.
Pass: Size = 16 (bits)
Get_Attribute_Single, Instance 2, Data.
Pass: No data in reserved bits 14, 15
Delete the connections at the conclusion of this test and leave the device in the On–Line state.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Request a Set_Attribute_Single service (x10) addressed to a valid instance to access attributes 00 - 99.
Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Service_Not_Supported (x08), Attribute_Not_Supported (x14)]
Num_Attributes (01) [Service_Not_Supported,
Attribute_Not_Settable (x0E), Attribute_Not_Supported]
Attributes_List (02) [Service_Not_Supported, Attribute_Not_Settable, Attribute_Not_Supported]
Value (03) [Service_Not_Supported, Attribute_Not_Settable]
Status (04) [Service_Not_Supported, Attribute_Not_Settable, Attribute_Not_Supported]
Off_On_Delay (05) [Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
On_Off_Delay (06) [Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
Off_On_Cycles (07) [Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
Undefined (08..99) [Service_Not_Supported, Attribute_Not_Supported]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
Service Name (Code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
Get_Attributes_All (01) [Success_Response, Service_Not_Supported]
Set_Attributes_All (02) [Success_Response, Service_Not_Supported]
(03..13) [Service_Not_Supported]
Get_Attribute_Single (14) [Success_Response and requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Service_Not_Supported, Attribute_Not_Settable (x0E)]
Reserved (17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
6) Behavior Tests.
6.1) For each instance of the DIP object, if Instance attribute 2, Attribute_List, is implemented,
Note 1: For Safety Devices, See CIP Safety PCTS (ODVA PUB00170) for test procedures
3) Common Services Test
Request each of the Common Services 00 - 49 addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Common Service request.
Service Name (Code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
Get_Attributes_All (01) [Success_Response, Service_Not_Supported]
(02..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value, Service_Not_Supported]
(15..49) [Service_Not_Supported]
Request each of the Common Services, 00-49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
Service Name (Code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
Get_Attributes_All (01) Note: If Number_of_Attributes = 0, Attributes_List is not returned.
[(USINT(0..255), USINT[Num_Attributes], BOOL(0, 1), BOOL (0, 1), BOOL
(0, 1), BOOL (0, 1), BOOL (0, 1), BOOL (0, 1), BOOL (0, 1), BOOL (0, 1),
USINT (0..255), USINT (1..7, 255), Service_Not_Supported]
Set_Attributes_All (02) [Success_Response, Service_Not_Supported]
(03..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Attribute_Not_Settable]
(17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100-255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Test.
5.1) If Set_Attributes_All is implemented for the instance,
Request a Set_Attributes_All using too much data.
Pass: Error_Response 94 15 FF, Too_Much_Data.
Request a Set_Attributes_All using too little data.
Pass: Error_Response 94 13 FF, Not_Enough_Data.
5.2) Request a Set_Attribute_Single, Instance attributes 3, 5..10, value = xFE.
Pass: For each attribute, Error_Response 94 09 FF, Invalid_Attribute_Value.
6) Behavior Test.
Note: This test description was written for both dynamically created and Predefined Master/Slave
Connection Set connections. For Predefined Master/Slave Connections, the test uses a Group2 I/O
message, depending on the I/O connection, to send Idle and Run commands. The Run I/O messages
are the I/O data for the test and cause the DOP to transition the Run.
Note: If Instance attribute 9, Command, is implemented, set it as specified to put the DOP in the
Idle or Ready state. Otherwise, ignore steps referring to the Command attribute. If the Command
attribute is implemented, follow the Behavior Test without using the Command attribute. Then,
repeat steps 6.1 through 6.4 using the Command Attribute to put the DOP in the Idle or Ready state.
Note: A Get_Attribute_Single request to the Command attribute must always return the value zero
regardless of the value that is used with a Set_Attribute_Single request. This check is done for each
Get_Attribute_Single request to the Command attribute but is only noted for the first two requests.
Note: If Instance attribute 9, Command, is not implemented and the device does not support the
Predefined Master/Slave Connection Set, skip steps 6.1 through 6.4.
Note: Run command I/O messages contain the number of bytes specified by the Consumed
Connection Size attribute and use non zero values unless otherwise noted.
6.0) Create/Allocate I/O Connection. If necessary, configure the I/O connection to access the DOP
value attribute and set the connection Watchdog_Timeout_Action to transition to timed out.
Note: If the DOP is part of the I/O data (is controlled explicitly) start at step 6.1)
6.1e) Verify behavior for Explicit control
Set Value Attribute = 1.
Close the Explicit Message connection.
Open the Explicit Message connection. Set EPR = 1 second
Get the Value Attribute = 1.
Pass: Value = 1.
Set a test timer for 5 seconds and wait for timer to expire.
Open the Explicit Message connection. Set EPR = 1 second
Get the Value Attribute = 1.
Pass: Value = 1.
skip to step 6.9
6.1) Run/Idle Test, I/O Messages
Set Command Attribute = 0.
Pass: Error_Response 94 0C FF, Object_State_Conflict.
Send Idle I/O data command.
Pass: No_Response.
Set Command Attribute = 1.
Pass: Error_Response 94 0C FF, Object_State_Conflict.
Send Run I/O data command.
Pass: No_Response.
Request Set_Attribute_Single, Value = 1.
Request Set_Attribute_Single, I/O Connection WatchDog_Timeout_Action = Time Out.
DOP transitions Available to Ready when connection transitions to Established state.
Request Set_Attribute_Single, I/O Connection EPR = 500 milliseconds.
For Dynamic I/O connections, request Apply_Attributes.
6.2) Idle Value Default Test
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = 1.
Set Command Attribute = 0. DOP transitions Ready to Idle.
Get the Command Attribute
Pass: Success_Response, Value = 0.
Send Idle I/O data command.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = 0.
Set Command Attribute = 1. DOP transitions Idle to Ready.
Request Get_Attribute_Single Command attribute.
Pass: Success_Response, Value = 0.
Send Run I/O data command, data = 1. DOP transitions Ready to Run.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = 1.
Send Run I/O data command, data = 0. DOP transitions Run to Run.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = 0.
Request Set_Attribute_Single, Value = 1.
Set Command Attribute = 0. DOP transitions Run to Idle.
Send Idle I/O data command.
Request Get_Attribute_Single, Value.
PUB00166 www.odva.org Page 94 of 344
CIP Object Tests
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Request a Set_Attribute_Single service (x10) addressed to a valid instance to access attributes 00 - 99.
Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Undefined (00) [Service_Not_Supported (x08), Attribute_Not_Supported (x14)]
Num_Attributes (01) [Service_Not_Supported,
Attribute_Not_Settable (x0E), Attribute_Not_Supported]
Attributes_List (02) [Service_Not_Supported, Attribute_Not_Settable, Attribute_Not_Supported]
Value (03) [Service_Not_Supported, Attribute_Not_Settable]
Status (04) [Service_Not_Supported, Attribute_Not_Settable, Attribute_Not_Supported]
Owner_Vendor (05) [Service_Not_Supported, Attribute_Not_Settable, Attribute_Not_Supported]
Owner_Serial_No (06) [Service_Not_Supported, Attribute_Not_Settable, Attribute_Not_Supported]
Input_Range (07) [Success_Response, Service_Not_Supported, Attribute_Not_Supported]
Value_Type (08) [Success_Response, Service_Not_Supported, Attribute_Not_Supported]
Undefined (09..99) [Attribute_Not_Supported, Service_Not_Supported]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
Service Name (Code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
Get_Attributes_All (01) [Success_Response, Service_Not_Supported]
Set_Attributes_All (02) [Success_Response, Service_Not_Supported]
(02..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value, Attribute_Not_Supported]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Attribute_Not_Settable]
Service_Not_Supported if Input_Range and Value_Type not implemented
Reserved (17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests
Set_Attribute_Single, attribute 7 Input_Range = 7.
Pass: Error_Response 94 09 FF, Invalid_Attribute_Value.
Set_Attribute_Single, attribute 7 Input_Range = 15.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
PUB00166 www.odva.org Page 102 of 344
CIP Object Tests
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Request a Set_Attribute_Single service (x10) addressed to a valid instance to access attributes 00 - 99.
Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
Number_of_Attributes (01) [Attribute_Not_Settable (x0E), Attribute_Not_Supported]
Attributes_List (02) [Attribute_Not_Settable, Attribute_Not_Supported]
Value (03) [Success_Response]
Status (04) [Attribute_Not_Settable, Attribute_Not_Supported]
Owner_Vendor_Id (05) [Attribute_Not_Settable, Attribute_Not_Supported]
Owner_Serial_No (06) [Attribute_Not_Settable, Attribute_Not_Supported]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
Service Name (Code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
Get_Attributes_All (01) [Success_Response, Service_Not_Supported]
Set_Attributes_All (02) [Success_Response, Service_Not_Supported]
(03..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response]
(17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Request each Object Specific Service, 75 - 99, addressed to a valid Instance ID.
Pass: The expected response from table below for each Object Specific Service request.
Service Name (Code) [Expected Responses]
Object Specific Codes (75..99) [Service_Not_Supported (x08)]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
5.1) If Set_Attributes_All is implemented for the instance,
Request a Set_Attributes_All using too much data.
Pass: Error_Response 94 15 FF, Too_Much_Data.
Request a Set_Attributes_All using too little data.
Pass: Error_Response 94 13 FF, Not_Enough_Data.
5.2) For each attribute that is implemented with Set access,
Request a Set_Attribute_Single service, Output_Range = 248.
Request a Set_Attribute_Single service, Value_Data_Type = 240.
Request a Set_Attribute_Single service, Fault_State = 248.
Request a Set_Attribute_Single service, Idle_State = 248.
Request a Set_Attribute_Single service, Command = 254.
Pass: For each attribute, Error_Response 94 09 FF, Invalid_Attribute_Value.
6) Behavior Test
Note: This test description was written for both dynamically created and Predefined Master/Slave
Connection Set connections. For Predefined Master/Slave Connections, the test uses a Group2 I/O
message, depending on the I/O connection, to send Idle and Run commands. The Run I/O messages
are the I/O data for the test and cause the AOP to transition the Run.
Note: If Instance attribute 13, Command, is implemented, set it as specified to put the AOP in the
Idle or Ready state. Otherwise, ignore steps referring to the Command attribute. If the Command
attribute is implemented, follow the Behavior Test without using the Command attribute. Then,
repeat steps 6.1 through 6.7 using the Command Attribute to put the AOP in the Idle or Ready state.
Note: A Get_Attribute_Single request to the Command attribute must always return the value zero
regardless of the value that is used with a Set_Attribute_Single request. This check is done for each
Get_Attribute_Single request to the Command attribute but is only noted for the first two requests.
Note: If Instance attribute 13, Command, is not implemented and the device does not support the
Predefined Master/Slave Connection Set, skip steps 6.1 through 6.7.
Note: Run command I/O messages contain the number of bytes specified by the Consumed
Connection Size attribute and use non zero values unless otherwise noted.
6.1) Create/Allocate I/O Connection. If necessary, configure the I/O connection to access the AOP
value attribute and set the connection Watchdog_Timeout_Action to transition to timed out.
Note: If the AOP is part of the I/O data (is controlled explicitly) start at step 6.1)
6.1e) Verify behavior for Explicit control
Set Value Attribute = Max Value.
Close the Explicit Message connection.
Open the Explicit Message connection. Set EPR = 1 second
Get the Value Attribute = Max Value.
Pass: Value = Max Value.
Set a test timer for 5 seconds and wait for timer to expire.
Open the Explicit Message connection. Set EPR = 1 second
Get the Value Attribute = Max Value.
Pass: Value = Max Value.
skip to step 6.9
6.1) Run/Idle Test, I/O Messages
Set Command Attribute = 0.
Pass: Error_Response 94 0C FF, Object_State_Conflict.
Send Idle I/O data command.
Pass: No_Response.
Set Command Attribute = 1.
Pass: Error_Response 94 0C FF, Object_State_Conflict.
Send Run I/O data command.
Pass: No_Response.
Request Set_Attribute_Single, Value = the average value for data type.
Request Set_Attribute_Single, I/O Connection WatchDog_Timeout_Action = Time Out.
Request Set_Attribute_Single, I/O Connection EPR = 500 milliseconds.
For Dynamic I/O connections, request Apply_Attributes.
AOP transitions Available to Ready when connection transitions to Established state.
6.2) Idle Value Default Test
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = the average value for data type.
Set Command Attribute = 0. AOP transitions Ready to Idle.
Get the Command Attribute
Pass: Success_Response, Value = 0.
Send Idle I/O data command.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = the average value for data type.
Set Command Attribute = 1. AOP transitions Idle to Ready.
Request Get_Attribute_Single Command attribute.
Pass: Success_Response, Value = 0.
Send Run I/O data command, data = average value for data type. AOP transitions Ready to Run.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = average value for data type.
Send Run I/O data command, data = average value for data type. AOP transitions Run to Run.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = average value for data type.
Request Set_Attribute_Single, Value = max value for data type.
Set Command Attribute = 0. AOP transitions Run to Idle.
Send Idle I/O data command.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = max value for data type.
Set Command Attribute = 1. AOP transitions Idle to Ready.
Send Run I/O data command, data = average value for data type. AOP transitions Ready to Run.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = average value for data type.
6.3) Fault Value Default Test
Allow the I/O message connection to time out, transition Run to Fault.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = average value for data type.
Reset or Create/Allocate the I/O Connection as done for step 6.1. transition Fault to Ready
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = average value for data type.
Request Set_Attribute_Single, Value = max value for data type.
Allow the I/O connection to time out, transition Ready to Fault.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = max value for data type.
Reset or Create/Allocate the I/O Connection as done for step 6.1. transition Fault to Ready
Set Command Attribute = 0. AOP transitions to Idle state.
Send Idle I/O data command, transition Ready to Idle.
Request Set_Attribute_Single, Value = max value for data type.
Allow the I/O connection to time out, transition Idle to Fault.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = max value for data type.
Reset or Create/Allocate the I/O Connection as done for step 6.1. transition Fault to Ready
Set Command Attribute = 1. AOP transitions to Ready state.
Send Run I/O data command, transition Ready to Run.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = max value for data type.
6.4) If Idle_Value attribute is not settable, skip this step of the test.
Idle Value Test
Request Set_Attribute_Single, Idle_State = 3.
Request Set_Attribute_Single, Idle_Value = minimum value for data type.
Send Run I/O data command, data = average value for data type. AOP transitions Ready to Run.
Allow the I/O message connection to time out, transition Run to Fault.
Request Get_Attribute_Single, Value
Pass: Success_Response, Value = minimum value for data type + 100.
Reset or Create/Allocate the I/O Connection as done for step 6.1, transition Fault to Ready
Request Get_Attribute_Single, Value
Pass: Success_Response, Value = minimum value for data type + 100.
Send Run I/O data command, data = average value for data type. AOP transitions Ready to Run.
Request Get_Attribute_Single, Value
Pass: Success_Response, Value = average value for data type.
Request Set_Attribute_Single, Fault_Value = 0.
6.7) If the Fault_State attribute is not settable, skip this step of the test.
6.7.1) Fault State Test, Low Limit
Request Set_Attribute_Single, Fault_State = 1 (Low Limit).
Request Set_Attribute_Single, Value = average value for data type.
Allow the I/O message connection to time out, transition Run to Fault.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = minimum value for data type.
Reset or Create/Allocate the I/O Connection as done for step 6.1, transition Fault to Ready
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = minimum value for data type.
Send Run I/O data command, data = average value for data type. AOP transitions Ready to Run.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = average value for data type.
6.7.2) Fault State Test, Low Limit
Request Set_Attribute_Single, Fault_State = 2 (High Limit).
Request Set_Attribute_Single, Value = average value for data type.
Allow the I/O message connection to time out, transition Run to Fault.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = maximum value for data type.
Reset or Create/Allocate the I/O Connection as done for step 6.1, transition Fault to Ready
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = maximum value for data type.
Send Run I/O data command data = average for data type. AOP transitions Ready to Run.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = average value for data type.
Request Set_Attribute_Single, Fault_State = 0.
6.8) Value after I/O Connection is Deleted
Request Set_Attribute_Single, Value = maximum value for data type.
Release/Close the I/O Connection.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = 0.
6.9) For each instance of the AOP object, if Instance attribute 2, Attribute_List, is implemented,
Request a Get_Attribute_Single, Number_of_Attributes.
Request a Get_Attribute_Single, Attributes_List.
Pass: Success_Response and List size = Number_of_Attributes.
Request a Get_Attribute_Single for each attribute in the list.
Pass: Success_Response and value for each attribute.
Delete the connections at the conclusion of this test and leave the device in the On–Line state.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Request a Set_Attribute_Single service (x10) addressed to a valid instance to access attributes 00 - 99.
Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
Service Name (Code) [Expected Responses]
(00..13) [Service_Not_Supported (x08)]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response]
(17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
5.1) If Operate_Mode is settable, Set_Attribute_Single, Operate_Mode = 255,
Pass: Error_Response 94 09 FF, Invalid_Attribute_Value
5.2) If Target_Margin attribute (10) is settable.
Set_Attribute_Single, Target_Margin = 0.
Pass: Error_Response 94 09 FF, Invalid_Attribute_Value
5.3) If Background_Margin attribute (11) is settable.
Set_Attribute_Single, Background_Margin = 255.
Pass: Error_Response 94 09 FF, Invalid_Attribute_Value
5.4) If Min_Detect_Distance and Max_Detect_Distance attributes (12, 13) are settable.
Set_Attribute_Single, Min_Detect_Distance = 100.
Set_Attribute_Single, Max_Detect_Distance = 0.
Pass: Error_Response 94 09 FF, Invalid_Attribute_Value
Set_Attribute_Single, Max_Detect_Distance = 0.
Set_Attribute_Single, Min_Detect_Distance = 100.
Pass: Error_Response 94 09 FF, Invalid_Attribute_Value
6) Behavior Tests
6.1) Verify Min/Max/Detect distance attributes
Get_Attribute_Single, Min_Detect_Distance, default value = 0.
Get_Attribute_Single, Max_Detect_Distance = default value = 65535.
Pass: Max_Detect_Distance > Min_Detect_Distance
Get_Attribute_Single, Detect_Distance.
Pass: Detect_Distance < Max_Detect_Distance and Min_Detect_Distance < Detect_Distance
Delete the connections at the conclusion of this test and leave the device in the On–Line state.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Undefined (00) [Service_Not_Supported (x08), Attribute_Not_Supported (x14)]
(01 - 09) [Service_Not_Supported, Attribute_Not_Settable, Attribute_Not_Supported]
Native_Language (10) [Success_Response, Service_Not_Supported, Attribute_Not_Settable,
Attribute_Not_Supported]
Undefined (11..99) [Service_Not_Supported, Attribute_Not_Supported]
Note 1: EPATH encoding is defined in the CIP Specification, Volume 1, Appendix C, Abstract
Syntax Encoding for Segment Types. The expected values for an EPATH are as follows.
Segment Type (bits 7, 6, 5) - 1, Logical Segment.
Logical Format (bits 4, 3, 2) - 0, 1, 4; Class ID, Instance ID, Attribute ID.
Logical Data Format (bits 1, 0) - 0, 1; 0 = USINT(1..255), 1 = UINT(1..65535).
An EPATH must specify Class ID, and Instance ID. Attribute ID is optional.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses] Full Parameter Instance
Undefined (00) [Attribute_Not_Supported (x14)]
Parameter_Value (01) [Success_Response] If Parameter_Value is not Read_Only
[Attribute_Not_Settable(x0E)] If Parameter_Value is Read_Only
Link_Path_Size (02) [Success_Response] If Link_Path is Settable
[Attribute_Not_Settable] If Link_Path is not Settable
Link_Path (03) Same as Link_Path_Size, #02
(04..21) [Attribute_Not_Settable]
(22..24) [Attribute_Not_Settable, Attribute_Not_Supported]
Undefined (25..99) [Attribute_Not_Supported]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
Service Name (Code) [Expected Responses]
Reserved (00) [Attribute_Not_Supported (x08)]
Get_Attributes_All (01) Attributes 1, 10, 11, 12 specified by Instance Attributes
5 and 6, Data_Type and Data_Size,
If Full Parameter Instances are Implemented,
[Parameter_Value, USINT (0..255), PATH_ID, WORD (0000000000xxxxxx),
USINT (1..26), USINT(1..255), SHORT_STRING, SHORT_STRING,
SHORT_STRING, Minimum_Value, Maximum_Value, Default_Value, UINT,
UINT , UINT , INT(32768..32767), UINT , UINT, UINT, UINT, USINT(0..255),
STRINGI, STRINGI, STRINGI), Service_Not_Supported]
Request each of the Reserved Services, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error tests.
Send a Set_Attribute_Single request to Instance attribute 6, Link_Path, with invalid path data.
Note: The test is only done if fragmented messaging is implemented.
Pass: The expected response from table below for the Set_Attribute_Single request.
If the Link_Path is Settable If Link_Path is NOT Settable and Fragmented Messaging
[Invalid_Attribute_Value (x09)] [Attribute_Not_Settable (x0E)]
6.2.1) Set Value with Invalid sizes. If Descriptor Read_Only bit = 0 (Parameter_Value is settable).
Request a Set_Attribute_Single using too much data for the Parameter_Value Type and Size.
Pass: Error_Response 94 15 FF, Too_Much_Data.
Request a Set_Attribute_Single using too little data for the Parameter_Value Type and Size.
Pass: Error_Response 94 13 FF, Not_Enough_Data.
6.3) Verify Min/Max/Value. If the attributes are implemented, otherwise, skip to step 6.4.
Note: If Get_Enum_String is implemented, Minimum_Value and Maximum_Value are required.
Send a Get_Attribute_Single request to the Parameter_Value attribute.
Send a Get_Attribute_Single request to the Minimum_Value attribute.
Send a Get_Attribute_Single request to the Maximum_Value attribute.
Send a Get_Attribute_Single request to the Default_Value attribute, for a full parameter.
Pass: Success_Response and the value for each attribute.
Pass: Minimum_Value <= Parameter_Value <= Maximum_Value
Pass: Minimum_Value <= Default_Value <= Maximum_Value
6.3.1) Set Value range check
Note: Skip this step unless Parameter_Value is settable and the Data_Type range allows the test.
For example, if Data_Type = UINT and Minimum_Value > 0, then set Parameter_Value <
Minimum_Value. If Maximum_Value < 65535, then set Parameter_Value > Maximum_Value.
Request a Set_Attribute_Single, Parameter_Value = Minimum_Value - 1.
Pass: Error_Response 94 09 FF, Invalid_Attribute_Value.
Request a Set_Attribute_Single, Parameter_Value = Minimum_Value + 1.
Pass: Error_Response 94 09 FF, Invalid_Attribute_Value.
6.4) Check String Attributes, if the Name, Units or Help String attributes are implemented
Send a Get_Attribute_Single request to the Parameter_Name_String attribute.
Send a Get_Attribute_Single request to the Units_String attribute.
Send a Get_Attribute_Single request to the Help_String attribute.
Pass: Success_Response and the SHORT_STRING value for each attribute.
Pass: The string is the correct length and each character in the string is a printable character.
6.5) Get_Enum_String service verification.
Send a Get_Attribute_Single request to the Minimum_Value attribute.
Send a Get_Attribute_Single request to the Maximum_Value attribute.
Request a Get_Enum_String service for each value from Minimum_Value to Maximum_Value.
Pass: Success_Response and the string value for each value.
Pass: The string is the correct length and each character in the string is a printable character.
Request a Get_Enum_String service for Max_Instance plus one.
Pass: Error_Response 94 20 FF, Invalid_Parameter_Value.
6.6) Verify Parameter Instances = Class Max_Instance.
Compare the last Instance Id to value of Class Max_Instance.
Pass: Instance Id = Class Max_Instance
6.7) Check International Strings.
request a Get_Attribute_Single, Identity, instance 1, Supported_Language_List.
Pass: Success_Response
PUB00166 www.odva.org Page 121 of 344
CIP Object Tests
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Undefined (00) [Attribute_Not_Supported (x14), Service_Not_Supported (x08)]
(01..07) [Service_Not_Supported, Attribute_Not_Settable, Attribute_Not_Supported,]
Native_Language (08) [Success_Response, Service_Not_Supported,
Attribute_Not_Settable, Attribute_Not_Supported]
Undefined (09..99) [Attribute_Not_Supported, Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error tests.
If class attribute 8, Language, is settable,
Request a Set_Attribute_Single service, Instance 0, Attribute 8 = 255
Pass: Error_Response 94 09 FF, Invalid_Attribute_Value
5.3) Service Test, if implemented.
Request a Get_Member, Destination_List, MemberId = 255.
Pass: Error_Response, 94 20 FF, Invalid Parameter
6) Behavior tests.
Check Parameter Group Instance 1 through Max_Instance.
Note: The Parameter Group Object test uses the Parameter Object Max_Instance class attribute to
verify that each instance stored in the Parameter Group Object is a valid Parameter Object Id.
6.1) Check Parameter Group Name.
Request a Get_Attribute_Single service, Parameter Group, Group_Name_String.
Pass: Success_Response and the SHORT_STRING Name value. All characters printable.
6.2) Check Number_Of_Members_in_Group.
Request a Get_Attribute_Single service, Parameter Group, Number_Of_Members_in_Group.
Pass: Success_Response, value > 0 and <= the Parameter Max_Instance Id.
6.3) Check Parameter Instances of Parameter Group
Note: Start reading at attribute 3 (the first Parameter Instance ID in the Group). Read the number of
attributes specified by Parameter Group, Number_Of_Members_in_Group attribute.
Request a Get_Attribute_Single service, for each Parameter Instance in the Parameter Group.
Request a Get_Attribute_Single service, Parameter Instance, Descriptor.
Pass: Success_Response and the Parameter Instance Descriptor data.
Request a Get_Attribute_Single service, Parameter Group Instance,
Number_Of_Members_in_Group + 1.
Pass: Error_Response 94 14 FF, Attribute_Not_Supported
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
2) Instance attribute access rules test.
Note: Locate an instance of the object by requesting a Get_Attribute_Single, attribute 1, from
instance 1 through first instance found. Any response other than Object_Does_Not_Exist (x16)
indicates an instance is found. Use found instance ID for any tests that require an instance.
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
Service Name (Code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
Get_Attributes_All (01) Note: If either Number_of_Attributes or Number_of_Bound_Instances = 0,
the corresponding list attribute is not returned
[USINT(0..106), USINT[Number_of_Attributes], USINT (1..255),
(UINT(1..65535), UINT(1..65535)) [Number_of_Bound_Instances], BOOL,
UINT, UDINT, Service_Not_Supported]
(02..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value, Service_Not_Supported]
Reserved (15..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, No_Response]
Request each Object Specific Service, 75 - 99, addressed to a valid Instance ID.
Pass: The expected response from table below for each Object Specific Service request.
Service Name (Code) [Expected Responses]
Object Specific Codes (75..99) [Service_Not_Supported (x08)]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, No_Response]
5) Error Tests
No additional testing is required.
6) Behavior Tests
6.1) For each Group object instance, if instance attribute 2, Attribute_List, is implemented,
Request a Get_Attribute_Single, Number_of_Attributes.
Request a Get_Attribute_Single, Attributes_List.
Pass: Success_Response and List size = Number_of_Attributes.
PUB00166 www.odva.org Page 130 of 344
CIP Object Tests
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 0 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
Service Name (Code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
Get_Attributes_All (01) Note: If either Number_of_Attributes or Number_of_Bound_Instances = 0,
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests
If Set_Attributes_All is implemented for the instance,
Request a Set_Attributes_All using too much data.
Pass: Error_Response 94 15 FF, Too_Much_Data.
Request a Set_Attributes_All using too little data.
Pass: Error_Response 94 13 FF, Not_Enough_Data
6) Behavior tests.
6.1) For each DIG object instance, if instance attribute 2, Attribute_List, is implemented,
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
Service Name (Code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
Get_Attributes_All (01) Note: If either Number_of_Attributes or Number_of_Bound_Instances = 0,
the corresponding list attribute is not returned.
[(USINT, USINT[Number_of_Attributes], USINT,
UINT[Number_of_Bound_Instances], BOOL, BOOL, BOOL, BOOL, BOOL,
BOOL), Service_Not_Supported]
(02..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Service_Success, Attribute_Not_Settable (x0E)]
(17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Test.
5.1) If Set_Attributes_All is implemented for the instance and no vendor attributes are
implemented,
Request a Set_Attributes_All using too much data.
Pass: Error_Response 94 15 FF, Too_Much_Data.
Request a Set_Attributes_All using too little data.
Pass: Error_Response 94 13 FF, Not_Enough_Data.
5.2)
Request a Set_Attribute_Single, Command = 254.
Pass: Error_Response 94 09 FF, Invalid_Attribute_Value.
Request a Set_Attribute_Single, Fault_State = 254.
Pass: Error_Response 94 09 FF, Invalid_Attribute_Value.
Request a Set_Attribute_Single, Fault_Value = 254.
Pass: Error_Response 94 09 FF, Invalid_Attribute_Value.
Request a Set_Attribute_Single, Idle_State = 254.
Pass: Error_Response 94 09 FF, Invalid_Attribute_Value.
Request a Set_Attribute_Single, Idle_Value = 254.
Pass: Error_Response 94 09 FF, Invalid_Attribute_Value.
6) Behavior Test.
Note: This test description was written for both dynamically created and Predefined Master/Slave
Connection Set connections. For Predefined Master/Slave Connections, the test uses a Group2 I/O
message, depending on the I/O connection, to send Idle and Run commands. The Run I/O messages
are the I/O data for the test and cause each DOP in the DOG to transition to Run.
Note: Set the Command attribute as specified to put the DOPs in the Idle or Ready state. Follow the
Behavior Test without using the Command attribute. Then, repeat steps 6.1 through 6.7 using the
Command Attribute to put the DOP in the Idle or Ready state.
Note: A Get_Attribute_Single request to the Command attribute must always return the value zero
regardless of the value that is used with a Set_Attribute_Single request. This check is done for each
Get_Attribute_Single request to the Command attribute but is only noted for the first two requests.
Note: Run command I/O messages contain the number of bytes specified by the Consumed
Connection Size attribute and use non zero values unless otherwise noted.
6.1) Create/Allocate I/O Connection. If necessary, configure the I/O connection to access grouped
DOP value attributes. Set the connection Watchdog_Timeout_Action to transition to timed out.
Set Command Attribute = 0.
Pass: Error_Response 94 0C FF, Object_State_Conflict.
Send Idle I/O data command.
Pass: No_Response.
Set Command Attribute = 1.
Pass: Error_Response 94 0C FF, Object_State_Conflict.
Send Run I/O data command.
Pass: No_Response.
Request Set_Attribute_Single, Value = 1.
Request Set_Attribute_Single, I/O Connection WatchDog_Timeout_Action = Time Out.
DOPs transitions Available to Ready when connection transitions to Established state.
Request Set_Attribute_Single, I/O Connection EPR = 500 milliseconds.
For Dynamic I/O connections, request Apply_Attributes.
6.2) Idle Value Default Test
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = 1.
Set Command Attribute = 0. DOPs transitions Ready to Idle.
Get the Command Attribute
Pass: Success_Response, Value = 0.
Send Idle I/O data command.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = 0.
Set Command Attribute = 1. DOPs transitions Idle to Ready.
Request Get_Attribute_Single Command attribute.
Pass: Success_Response, Value = 0.
Send Run I/O data command, data = 1. DOPs transitions Ready to Run.
Request Get_Attribute_Single, Value.
Reset or Create/Allocate the I/O Connection as done for step 6.1, transition Fault to Ready
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = 1.
Send Run I/O data command. DOPs transitions Ready to Run.
Request Set_Attribute_Single, Fault_State = 0.
6.8) Value after I/O Connection is Deleted
Request Set_Attribute_Single, Value = 1.
Release/Close the I/O Connection.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = 0.
6.9) For each instance of the DOG object, if Instance attribute 2, Attribute_List, is implemented,
Request a Get_Attribute_Single, Number_of_Attributes.
Request a Get_Attribute_Single, Attributes_List.
Pass: Success_Response and List size = Number_of_Attributes.
Request a Get_Attribute_Single for each attribute in the list.
Pass: Success_Response and value for each attribute.
6.10) For each instance of the DOG object, if instance attribute 4, Binding, is implemented,
Request a Get_Attribute_Single, Number_of_Bound_Instances.
Request a Get_Attribute_Single, Binding.
Pass: Success_Response with a valid DOP Instance Id.
Request a Get_Attribute_Single, Value, for each DOP instance in the Binding list.
Pass: Success_Response, value for each DOP instance.
6.10.1) Check Attributes of Bound Instances
Request a Get_Attribute_Single, Fault_Action, Fault_Value, Idle_Action, Idle_Value, and
Run_Idle_Command implemented in the DOG.
Request a Set_Attribute_Single for each attribute of the bound instance(s).
Pass: Error_Response 94 0E FF, attribute not settable (or 14, attribute not implemented).
Request a Get_Attribute_Single, for the attribute, for each DOP instance.
Pass: Success_Response, point value = group value for each attribute.
Delete the connections at the conclusion of this test and leave the device in the On–Line state.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
Service Name (Code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
Get_Attributes_All (01) Note: If either Number_of_Attributes or Number_of_Bound_Instances = 0,
the corresponding list attribute is not returned.
[(USINT, USINT[Number_of_Instances], USINT, (UINT (x08, x09, x1D, x1E),
UINT (1..65535) ){Number_of_Bound_Instances], BOOL),
Service_Not_Supported]
(02..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value]
(15..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests
No additional testing required.
6) Behavior Tests
6.1) For each Discrete Group object instance, if instance attribute 2, Attribute_List, is implemented,
Request a Get_Attribute_Single, Number_of_Attributes.
Request a Get_Attribute_Single, Attributes_List.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
Service Name (Code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
Get_Attributes_All (01) Note: If Number_of_Attributes = 0, list is not returned.
[USINT(1..255), USINT[Number_of_Attributes],
USINT, UINT[Number_of_Bound_Instances],
BOOL, UINT, (UDINT, USINT (0..9, 100), BOOL), Service_Not_Supported]
Set_Attributes_All (02) [Success_Response, Service_Not_Supported]
(03..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value]
(15..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests
If Attributes 8 is settable, Set_Attribute_Single, Attribute = 8, value = 255.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
Service Name (Code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
Get_Attributes_All (01) Note: If either Number_of_Attributes or Number_of_Bound Instances = 0, the
corresponding list attribute is not returned.
[(USINT, USINT[Number_of_Attributes], USINT, UINT[Bound_Instances],
BOOL, UINT, UDINT, USINT (0..9, 100), BOOL, BOOL, Fault_Value, BOOL,
Idle_Value), Service_Not_Supported]
Note: Data type for Fault_Value and Idle_Value
depends on Attribute 8, Value_Data_Type
Set_Attributes_All (02) [Success_Response, Service_Not_Supported]
(03..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Attribute_Not_Settable]
(17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: Expected responses for Reserved Services addressed to the Class.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
Note: Set the Command attribute as specified to put the AOPs in the Idle or Ready state. Follow the
Behavior Test without using the Command attribute. Then, repeat steps 6.1 through 6.7 using the
Command Attribute to put the AOP in the Idle or Ready state.
Note: A Get_Attribute_Single request to the Command attribute must always return the value zero
regardless of the value that is used with a Set_Attribute_Single request. This check is done for each
Get_Attribute_Single request to the Command attribute but is only noted for the first two requests.
Note: Run command I/O messages contain the number of bytes specified by the Consumed
Connection Size attribute and use non zero values unless otherwise noted.
6.1) Create/Allocate I/O Connection. If necessary, configure the I/O connection to access grouped
AOP value attributes. Set the connection Watchdog_Timeout_Action to transition to timed out.
Set Command Attribute = 0.
Pass: Error_Response 94 0C FF, Object_State_Conflict.
Send Idle I/O data command.
Pass: No_Response.
Set Command Attribute = 1.
Pass: Error_Response 94 0C FF, Object_State_Conflict.
Send Run I/O data command.
Pass: No_Response.
Request Set_Attribute_Single, Value = 1.
Request Set_Attribute_Single, I/O Connection WatchDog_Timeout_Action = Time Out.
AOPs transitions Available to Ready when connection transitions to Established state.
Request Set_Attribute_Single, I/O Connection EPR = 500 milliseconds.
For Dynamic I/O connections, request Apply_Attributes.
6.2) Idle Value Default Test
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = 1.
Set Command Attribute = 0. AOPs transitions Ready to Idle.
Get the Command Attribute
Pass: Success_Response, Value = 0.
Send Idle I/O data command.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = 0.
Set Command Attribute = 1. AOPs transitions Idle to Ready.
Request Get_Attribute_Single Command attribute.
Pass: Success_Response, Value = 0.
Send Run I/O data command, data = 1. AOPs transitions Ready to Run.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = 1.
Send Run I/O data command, data = 0. AOPs transitions Run to Run.
Request Get_Attribute_Single, Value.
Pass: Success_Response, Value = 0.
Request Set_Attribute_Single, Value = 1.
instance 1 through first instance found. Any response other than Object_Does_Not_Exist (x16)
indicates an instance is found. Use found instance ID for any tests that require an instance.
Request a Get_Attribute_Single service (x0E) addressed to a valid instance to access attributes
00 - 99. Save the returned value for each Get_Attribute_Single request.
Pass: The expected response from table below for each Get_Attribute_Single request.
Attribute Name (ID) [Expected values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
Number_of_Attributes (01) [USINT (1..107), Attribute_Not_Supported]
Attributes_List (02) [USINT[Number_of_Attributes], Attribute_Not_Supported]
Bound_Instances (03) [USINT (0..255)]
Binding, Class/Instance List (04) [(UINT (x0A, x0B, x20, x21),
UINT (1..65535) )[Bound_Instances], Attribute_Not_Supported]
Status (05) [BOOL (0, 1), Attribute_Not_Supported]
Owner_Vendor (06) [UINT, Attribute_Not_Supported]
Owner_Serial_No (07) [(UDINT, Attribute_Not_Supported]
Value_Data_Type (08) [USINT (0..9, 100), Attribute_Not_Supported]
Undefined (09..99) [Attribute_Not_Supported]
Request a Set_Attribute_Single service (x10) addressed to a valid instance to access attributes
00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Get_Attribute_Single request.
Attribute Name (ID) [Expected values, Responses]
Undefined (00) [Service_Not_Supported (x08), Attribute_Not_Supported (x14)]
Num_Attributes (01) [Service_Not_Supported,
Attribute_Not_Settable (x0E), Attribute_Not_Supported]
Attributes_List (02) [Service_Not_Supported, Attribute_Not_Settable, Attribute_Not_Supported]
Bound_Instances (03) [Service_Not_Supported, Attribute_Not_Settable, Attribute_Not_Supported]
Binding, Class/Instance List (04) [Service_Not_Supported, Attribute_Not_Settable, Attribute_Not_Supported]
Status (05) [Service_Not_Supported, Attribute_Not_Settable, Attribute_Not_Supported]
Owner_Vendor (06) [Service_Not_Supported, Attribute_Not_Settable, Attribute_Not_Supported]
Owner_Serial_No (07) [Service_Not_Supported, Attribute_Not_Settable, Attribute_Not_Supported]
Value_Data_Type (08) [Success_Response, Service_Not_Supported, Attribute_Not_Supported]
Undefined (09..99) [Service_Not_Supported, Attribute_Not_Supported]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (Code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
Get_Attributes_All (01) Note: If either Number_of_Attributes or Number_of_Bound_Instances = 0,
the corresponding list attribute is not returned.
[(USINT, USINT[Number_of_Attributes], USINT,
(UINT(x0A, x0B, x20, x21), UINT(1..65535) )[Bound_Instance],
BOOL, UINT, UDINT, USINT (0..9, 100)), Service_Not_Supported]
(02..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value, Service_Not_Supported]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Service_Not_Supported]
[Success_Response] If Attribute 8 is settable
Reserved (17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
5.1) For these attributes implemented with Set access,
Request a Set_Attribute_Single service, Value_Data_Type = 240.
Request a Set_Attribute_Single service, Fault_State = 248.
Request a Set_Attribute_Single service, Idle_State = 248.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
instance 1 through first instance found. Any response other than Object_Does_Not_Exist (x16)
indicates an instance is found. Use found instance ID for any tests that require an instance.
Request a Get_Attribute_Single service (x0E) addressed to a valid instance to access attributes
00 - 99. Save the returned value for each Get_Attribute_Single request.
Pass: The expected response from table below for each Get_Attribute_Single request and refer
to CIP Vol 1. Edition 3.6, Table 5-23.3 Position Sensor Object Instance Attributes for details.
Note: Instance attrbiute 11 (Position Sensor Type) must be in the range 0..12.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
Required Attributes [Success]
Optional Attributes [expected values, or Attribute_Not_Supported (x14)]
Undefined (51..99) [Attribute_Not_Supported]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (code) [Expected Responses]
(00..13) [Service_Not_Supported (x08)]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Attribute_Not_Settable (x0E)]
Reserved (17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
5.1) Error value test for settable attributes
Set too much data to the attribute
Pass: The DUT returns 0x15 (Too much data).
6) Behavior tests
For the details of the Pass / Fail criteria, please follow the CT Test Tool Position Sensor Test itself.
6.1) Attributes and services relationship verification
Attribute 3 and 10 shall not be implemented at the same time.
Verify conditions for the Conditional attributes
6.2) NV attributes behavior verification
6.3) Preset Value and Offset Value Test
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Request a Set_Attribute_Single service (x10) addressed to a valid instance to access attributes 00 - 99.
Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
Number_of_Attributes (01) [Attribute_Not_Settable (x0E)], Attribute_Not_Supported]
Attributes_List (02) [Attribute_Not_Settable, Attribute_Not_Supported]
Axis_Number (03) [Attribute_Not_Settable]
Reserved (04) [Attribute_Not_Supported]
General_Fault (05) [Attribute_Not_Settable]
Command_Message_Type (06) [Success_Response, Attribute_Not_Settable]
Response_Message_Type (07) [Success_Response, Attribute_Not_Settable]
Fault_Input (08) [Attribute_Not_Settable, Attribute_Not_Supported]
Fault_Input_Action (09) [[Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
Home_Action (10) [Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
Home_Action_Level (11) [Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
Home_Arm (12) [Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
Index_Action (13) [Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
Index_Action_Level (14) [Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
Index_Arm(15) [Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
Home_Input_Level(16) [Attribute_Not_Settable, Attribute_Not_Supported]
Home_Position (17) [Attribute_Not_Settable, Attribute_Not_Supported]
Index_Position (18) [Attribute_Not_Settable, Attribute_Not_Supported]
Registration_Action (19) [Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
Registration_Active_Level (20) [Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
Registration_Arm (21) [Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
Registration_Input_Level(22) [Attribute_Not_Settable, Attribute_Not_Supported]
Registration_Offset (23) [Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
Registration_Position (24) [Attribute_Not_Settable, Attribute_Not_Supported]
Follow_Enable (25) [Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
Follow_Axis (26) [Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
5) Error Tests.
5.1) Test the implemented attributes accessible by Set_Attribute_Single using invalid data.
attribute 6, Command_Message_Type, value = 255 for this and following attributes
attribute 7, Response_Message_Type
attribute 11, Home_Active_Level
attribute 12, Home_Arm
attribute 14, Index_Active_Level
attribute 15, Index_Arm
attribute 20, Registration_Active_Level
attribute 21, Registration_Arm
attribute 25, Follow_Enable
attribute 9, Fault_Input_Action, value = 6..127 for this and following attributes
attribute 10, Home_Action
attribute 13, Index_Action
attribute 19, Registration_Action
Pass: Error_Response, 94 09 FF, Invalid_Attribute_Value for all attributes
5.2) I/O Command Message Errors. For Position Controller Profile, use valid command data except
for the specified error condition.
Request a Command Message with less than 8 bytes of data
Pass: Error Response message x13 with additional code = xff.
Request a Command Message for each unsupported command type
Pass: Error Response message x08 with additional code = 01.
Request a Command Message for invalid response types
Pass: Error Response message x08 with additional code = 02.
Request a Command Message for each unsupported command axis
Pass: Error Response message x05 with additional code = 01.
Request a Command Message for unsupported response axis
Pass: Error Response message x05 with additional code = 02.
5.3) I/O Attribute Access Errors.
Request a Command Message for Get unsupported attribute
Pass: Error Response message x14 with additional code = x02.
Request a Command Message for Set unsupported attribute
Pass: Error Response message x14 with additional code = x01.
Request a Command Message for Set unsettable attribute
Pass: Error Response message x0E with additional code = xff.
Request a Command Message for Set attribute with invalid value
Pass: Error Response message x09 with additional code = xff.
Request a Command Message for Get attribute 2 , Attribute List
Pass: Error Response message x11 with additional code = xff, if implemented
Pass: Error Response message x14 with additional code = x02, if not implemented
6) Behavior tests.
6.1) For Position Controller Profile, Command Messages
Request a Command Message for each supported positioning mode
Pass: Response message with requested response.
6.1.1) Command Message validation test
Request a Get Attribute for each supported attribute referenced in the command message
Pass: Attribute value equals that as sent in the command message.
Request a Get Attribute, Consumed Command Message
Pass: Attribute data equals that as sent in the command message.
6.1.2) Response Message validation test
Request a Get Attribute for each supported attribute referenced in the response message
Pass: Attribute value equals that as sent in the response message.
Request a Get Attribute, Produced Response Message
Pass: Attribute data equals that as sent in the response message.
6.2) Attribute Access, Command Messages
Request a Command Message for each supported attribute access command
Pass: Response message with requested response.
Validate Command and response messages per 6.1.1 and 6.1.2
Pass: Attribute data equals that as sent in the command/response message.
6.3) If Instance attribute 2, Attribute_List, is implemented,
Request a Get_Attribute_Single, Number_of_Attributes.
Request a Get_Attribute_Single, Attributes_List.
Pass: Success_Response and List size = Number_of_Attributes.
Request a Get_Attribute_Single for each attribute in the list.
Pass: Success_Response and value for each attribute.
Delete the connections at the conclusion of this test and leave the device in the On–Line state.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Request a Set_Attribute_Single service (x10) addressed to a valid instance to access attributes 00 - 99.
Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
Number_of_Attributes (01) [Attribute_Not_Settable (x0E)]
Attributes_List (02) [Attribute_Not_Settable]
Mode (03) [Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
Position_Units (04) [Success_Response, Attribute_Not_Settable, Attribute_Not_Supported]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (code) [Expected Responses]
(00..13) [Service_Not_Supported (x08)]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Attribute_Not_Settable (x0E)]
Reserved (17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
5.1) Invalid attribute values
Request a Set_Attribute_Single service with value = -1 for each settable attribute
attribute 4, Position_Units
attribute 5, Profile_Units
attribute 7, Target_Velocity
attribute 8, Acceleration
attribute 9, Deceleration
attribute 22, Jog_Velocity
attribute 26, Positive_Torque_Limit
attribute 30, Kp
attribute 31, Ki
attribute 32, Kd
attribute 33, MaxKi
attribute 35, Velocity_Feed_Forward
attribute 36, Accel_Feed_Forward
attribute 40, Feedback_Resolution
attribute 41, Motor_Resolution
attribute 43, Max_Correction_Velocity
attribute 44, Max_Static_Following_Error
attribute 45, Max_Dynamic_Following_Error
Pass: Error_Response, 94 09 FF, Invalid Attribute Value.
Request a Set_Attribute_Single service with value = 0x0AC for each settable attribute
attribute 10, Incremental_Position_Flag
attribute 11, Load_Data/Profile_Handshake
attribute 17, Enable
indicates an instance is found. Use found instance ID for any tests that require an instance.
Request a Get_Attribute_Single service (x0E) addressed to a valid instance to access attributes 00 - 99.
Save the returned value for each Get_Attribute_Single request.
Pass: The expected response from table below for each Get_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
Block (01) [USINT]
Block Execute (02) [BOOL]
Current Block (03) [USINT]
Block Fault (04) [BOOL]
Block Fault Code (05) [USINT(0..3), Attribute_Not_Supported]
Counter (06) [DINT(0..0x7FFFFFFF), Attribute_Not_Supported]
Undefined (07..99) [Attribute_Not_Supported]
Request a Set_Attribute_Single service (x10) addressed to a valid instance to access attributes 00 - 99.
Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
Block (01) [Success_Response]
Block Execute (02) [Success_Response]
Current Block (03) [Attribute_Not_Settable (x0E)]]
Block Fault (04) [Attribute_Not_Settable]
Block Fault Code (05) [Attribute_Not_Settable, Attribute_Not_Supported]
Counter (06) [Success_Response , Attribute_Not_Supported]
Undefined (07..99) [Attribute_Not_Supported]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (code) [Expected Responses]
(00..13) [Service_Not_Supported (x08)]
Get_Attribute_Single (14) [requested value]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
5.1) Invalid attribute values
Request a Set_Attribute_Single service for Counter, value = -1
Pass: Error_Response, 94 09 FF, Invalid Attribute Value.
5.1) I/O Command Message Errors. For Position Controller Profile, use valid command data except
for the specified error condition.
Request a Command Message for Get unsupported attribute
Pass: Error Response message x14 with additional code = x02.
Request a Command Message for Set unsupported attribute
Pass: Error Response message x14 with additional code = x01.
Request a Command Message for Set unsettable attribute
Pass: Error Response message x0E with additional code = xff.
Request a Command Message for Set attribute with invalid value
Pass: Error Response message x09 with additional code = xff.
6) Behavior tests.
6.1) For Position Controller Profile, Command Messages
Request a Command Message for each supported attribute access command
Pass: Response message with requested response.
6.1.1) Command Message validation test.
Request a Get Attribute for each supported attribute referenced in the command message
Pass: Attribute value equals that as sent in the command message.
Request a Get Attribute, Position Controller Class attribute Consumed Command Message
Pass: Attribute data equals that as sent in the command message.
6.1.2) Response Message validation test.
Request a Get Attribute for each supported attribute referenced in the response message
Pass: Attribute value equals that as sent in the response message.
Request a Get Attribute, Position Controller Class attribute Produced Response Message
Pass: Attribute data equals that as sent in the response message.
6.2) Block Programming/Execution
Test under development. To be tested in combination with the Command Block Object.
Delete the connections at the conclusion of this test and leave the device in the On–Line state.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
indicates an instance is found. Use found instance ID for any tests that require an instance.
Request a Get_Attribute_Single service (x0E) addressed to a valid instance to access attributes 00 - 99.
Save the returned value for each Get_Attribute_Single request.
Pass: The expected response from table below for each Get_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
Block Command (01) [USINT]
Block Link # (02) [USINT]
Modify Attribute, Command 01
Target Class (03) [USINT]
Target Instance (04) [USINT]
Attribute # (05) [USINT]
Attribute Data (06) [BYTE[]]
Wait Equals, Command 02
Target Class (03) [USINT]
Target Instance (04) [USINT]
Attribute # (05) [USINT]
Compare Time Out (06) [DINT(0..0x7FFFFFFF]
Compare Data (07) [BYTE[]]
Conditional Link > , Command 03
Target Class (03) [USINT]
Target Instance (04) [USINT]
Attribute # (05) [USINT]
Compare Link (06) [USINT]
Compare Data (07) [BYTE[]]
Conditional Link < , Command 04
Target Class (03) [USINT]
Target Instance (04) [USINT]
Attribute # (05) [USINT]
Compare Link (06) [USINT]
Compare Data (07) [BYTE[]]
Delay , Command 06
Delay (03) [DINT(1..0x7FFFFFFF]
Trajectory , Command 07
Target Position (03) [DINT]
Target Velocity (04) [DINT]
Incremental (05) [BOOL]
Trajectory & Wait, Command 08
Target Position (03) [DINT]
Target Velocity (04) [DINT]
Incremental (05) [BOOL]
Change Velocity, Command 09
Request a Set_Attribute_Single service (x10) addressed to a valid instance to access attributes 00 - 99.
Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
Block Command (01) [Success_Response]
Block Link # (02) [Success_Response]
Modify Attribute, Command 01
Target Class (03) [Success_Response]
Target Instance (04) [Success_Response]
Attribute # (05) [Success_Response]
Attribute Data (06) [Success_Response]
Wait Equals, Command 02
Target Class (03) [Success_Response]
Target Instance (04) [Success_Response]
Attribute # (05) [Success_Response]
Compare Time Out (06) [Success_Response]
Compare Data (07) [Success_Response]
Conditional Link > , Command 03
Target Class (03) [Success_Response]
Target Instance (04) [Success_Response]
Attribute # (05) [Success_Response]
Compare Link (06) [Success_Response]
Compare Data (07) [Success_Response]
Conditional Link < , Command 04
Target Class (03) [Success_Response]
Target Instance (04) [Success_Response]
Attribute # (05) [Success_Response]
Compare Link (06) [Success_Response]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (code) [Expected Responses]
(00..13) [Service_Not_Supported (x08)]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Attribute_Not_Supported (x14)]
Reserved (17..49) [Service_Not_Supported]
Request each Object–specific Service, 75 - 99, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Object–specific Service request.
Service Name (Code) [Expected Responses]
Object–specific Codes (75..99) [Service_Not_Supported (x08)]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
5.1) I/O Command Message Errors. For Position Controller Profile, use valid command data except
for the specified error condition.
Request a Command Message for Get unsupported attribute
Pass: Error Response message x14 with additional code = x02.
Request a Command Message for Set unsupported attribute
Pass: Error Response message x14 with additional code = x01.
Request a Command Message for Set unsettable attribute
Pass: Error Response message x0E with additional code = xff.
Request a Command Message for Set attribute with invalid value
Pass: Error Response message x09 with additional code = xff.
6) Behavior tests.
6.1) For Position Controller Profile, Command Messages
Request a Command Message for each supported attribute access command
Pass: Response message with requested response.
6.1.1) Command Message validation.
Request a Get Attribute for each supported attribute referenced in the command message
Pass: Attribute value equals that as sent in the command message.
Request a Get Attribute, Position Controller Class attribute Consumed Command Message
Request a Set_Attribute_Single service (x10) addressed to the class, instance ID zero, to access
attributes 00 to 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Get_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Request each Reserved service 100-255 addressed to the class (x28), instance ID zero.
Pass: The expected response from table below for each Reserved service request.
Service Name (Code) [Expected Response]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
5.1) Test the implemented attributes accessible by Set_Attribute_Single using invalid data.
Request a Set_Attribute_Single, instance 1, attribute 3, MotorType = 11.
Pass: [Invalid_Attribute_Value (x09), Attribute_Not_Settable (x0E)]
5.2) Test the implemented attributes accessible by Set_Attribute_Single using insufficient data.
Request a Set_Attribute_Single, instance 1. Use xFF for each byte shown for each attribute.
attribute 3, MotorType with 0 bytes of data.
attribute 4, CatNumber with 0 bytes of data.
attribute 5, Manufacturer with 0 bytes of data.
attribute 6, RatedCurrent, with 1 byte of data.
attribute 7, RatedVoltage, with 1 byte of data.
attribute 8, RatedPower, with 2 bytes of data.
attribute 9, RatedFreq, with 1 byte of data.
attribute 10, RatedTemp, with 1 byte of data.
attribute 11, RatedTemp, with 1 byte of data.
attribute 12, PoleCount, with 1 byte of data.
attribute 13, TorqConstant, with 2 bytes of data.
PUB00166 www.odva.org Page 195 of 344
CIP Object Tests
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Request a Set_Attribute_Single service (x10) addressed to a valid instance to access attributes 00 - 99.
Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
NumAttr (01) [Attribute_Not_Settable (x0E), Attribute_Not_Supported]
5) Error Tests.
5.1) Test the implemented attributes accessible by Set_Attribute_Single using invalid data.
Request a Set_Attribute_Single, instance 1,
attribute 3, Run1 = F0.
attribute 4, Run2 = F0.
attribute 5, NetCtrl = F0.
attribute 12, FaultRst = F0.
attribute 16, DNFaultMode = F0.
attribute 17, ForceFault/Trip = F0.
Pass: Error_Response, 94 09 FF, Invalid_Attribute_Value for all responses
attribute 16, DNFaultMode = 5..99, 200..255.
attribute 20, DNIdleMode = = 5..99, 200..255.
attribute 20, ProtectMode = = 5..99, 200..255.
PUB00166 www.odva.org Page 201 of 344
CIP Object Tests
Pass: Ready = 1.
6.3) Fault/Trip test. If ForceFault/Trip (attribute 17) is not settable, or if state (attribute 6) is not
implemented skip step 6.3.
Send a Set_Attribute_Single service to instance one attribute 17, ForceFault/Trip = 0.
Send a Set_Attribute_Single service to instance one attribute 17, ForceFault/Trip = 1.
Send a Get_Attribute_Single service to instance one attribute 6, State.
Pass: State = 6 or 7.
Note: Control Supervisor should transition to the Fault_Stop or Faulted state. Continue
monitoring the Sate attribute until State = 7, Faulted is returned. Polling should continue for 10
seconds. If State does not transition to Faulted, the test fails.
Send a Set_Attribute_Single service to instance one attribute 12, FaultRst = 0.
Send a Set_Attribute_Single service to instance one attribute 12, FaultRst = 1.
Note: This insures a rising edge of the FaultRst attribute value.
Send a Get_Attribute_Single service to instance one attribute 6, State.
Pass: State = 2 or 3
Note: Control Supervisor should transition to Not_Ready (2) or Ready (3) state. Polling should
continue for 10 seconds. If State does not transition in this amount of time, the test fails.
6.4) DNFaultMode DNIdleMode (default)
Send a Get_Attribute_Single service to instance one attribute 19, Delay, save value.
Send a Set_Attribute_Single service to instance one attribute 16, DNFaultMode = 0, 1, 3, 4.
Send a Set_Attribute_Single service to instance one attribute 20, DNIdleMode = 0, 1, 3, 4.
Open I/O connection, set EPR = 3 seconds.
Send I/O Idle message.
Set a test timer for the Delay time, when timer expires, .
Send a Get_Attribute_Single service to instance one attribute 6, State.
Pass: State = 6, Fault_Stop.
Send a Get_Attribute_Single service to instance one attribute 7, Running1.
Pass: The expected response from table below.
DNFaultMode 0 1 3 4
Running1 0 1 1 1
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Request a Get_Attribute_Single service (x0E) addressed to a valid instance to access attributes 00 - 99.
Save the returned value for each Get_Attribute_Single request.
Pass: The expected response from table below for each Get_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
NumAttr(01) [UINT(1..65535), Attribute_Not_Supported]
Attributes (02) [USINT[NumbAttr], Attribute_Not_Supported]
AtReference (03) [BOOL, Attribute_Not_Supported]
NetRef (04) [BOOL]
NetProc (05) [BOOL, Attribute_Not_Supported (x14)]
DriveMode (06) [USINT(0..5)]
SpeedActual (07) [INT]
SpeedRef (08) [INT]
CurrentActual (09) [INT, Attribute_Not_Supported]
CurrentLimit (10) [INT, Attribute_Not_Supported]
TorqueActual (11) [INT, Attribute_Not_Supported]
TorqueRef (12) [INT, Attribute_Not_Supported]
ProcessActual (13) [INT, Attribute_Not_Supported]
ProcessRef (14) [INT, Attribute_Not_Supported]
PowerActual (15) [INT, Attribute_Not_Supported]
InputVoltage (16) [INT, Attribute_Not_Supported]
OutputVoltage (17) [INT, Attribute_Not_Supported]
AccelTime (18) [UINT, Attribute_Not_Supported]
DecelTime (19) [UINT, Attribute_Not_Supported]
LowSpdLimit (20) [UINT, Attribute_Not_Supported]
HighSpdLimit (21) [UINT, Attribute_Not_Supported]
SpeedScale (22) [SINT, Attribute_Not_Supported]
CurrentScale (23) [SINT, Attribute_Not_Supported]
TorqueScale (24) [SINT, Attribute_Not_Supported]
ProcessScale (25) [SINT, Attribute_Not_Supported]
PowerScale (26) [SINT, Attribute_Not_Supported]
VoltageScale (27) [SINT, Attribute_Not_Supported]
TimeScale (28) [SINT, Attribute_Not_Supported]
RefFromNet (29) [BOOL, Attribute_Not_Supported]
ProcFromNet (30) [BOOL, Attribute_Not_Supported]
FieldIorV (31) [BOOL, Attribute_Not_Supported]
FieldVoltRatio (32) [UINT, Attribute_Not_Supported]
FieldCurSetPt (33) [UINT, Attribute_Not_Supported]
FieldWkEnable (34) [BOOL, Attribute_Not_Supported]
FieldFurActual (35) [INT, Attribute_Not_Supported]
Request a Set_Attribute_Single service (x10) addressed to a valid instance to access attributes 00 - 99.
Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
NumAttr (01) [Attribute_Not_Settable (x0E), Attribute_Not_Supported]
Attributes (02) [Attribute_Not_Settable, Attribute_Not_Supported]
AtReference (03) [Attribute_Not_Settable, Attribute_Not_Supported]
NetRef (04) [Success_Response]
NetProc (05) [Success_Response, Attribute_Not_Supported]
DriveMode (06) [Success_Response, Attribute_Not_Settable]
SpeedActual (07) [Attribute_Not_Settable]
SpeedRef (08) [Success_Response]
CurrentActual (09) [Attribute_Not_Settable, Attribute_Not_Supported]
CurrentLimit (10) [Success_Response, Attribute_Not_Supported]
TorqueActual (11) [Attribute_Not_Settable, Attribute_Not_Supported]
TorqueRef (12) [Success_Response, Attribute_Not_Supported]
ProcessActual (13) [Attribute_Not_Settable, Attribute_Not_Supported]
ProcessRef (14) [Success_Response, Attribute_Not_Supported]
PowerActual (15) [Attribute_Not_Settable, Attribute_Not_Supported]
InputVoltage (16) [Attribute_Not_Settable, Attribute_Not_Supported]
OutputVoltage (17) [Attribute_Not_Settable, Attribute_Not_Supported]
AccelTime (18) [Success_Response, Attribute_Not_Supported]
DecelTime (19) [Success_Response, Attribute_Not_Supported]
LowSpdLimit (20) [Success_Response, Attribute_Not_Supported]
HighSpdLimit (21) [Success_Response, Attribute_Not_Supported]
SpeedScale (22) [Success_Response, Attribute_Not_Supported]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (Code) [Expected Response]
Reserved (00) [Service_Not_Supported (x08)]
(01..13) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Object–specific Service, 75 - 99, addressed to a valid Instance ID.
Pass: The expected response from table below for each Object–specific Service request.
Service Name (Code) [Expected Responses]
Object–specific Codes (75..99) [Service_Not_Supported (x08)]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
5.1) Test the implemented attributes accessible by Set_Attribute_Single using invalid data.
attribute 4, NetRef = 2.
attribute 5, NetProc = 2.
attribute 6, DriveMode = xFF.
attribute 34, FieldWkEnable = 2.
Pass: Error_Response, 94 09 FF, Invalid_Attribute_Value
5.2) Test the implemented attributes accessible by Set_Attribute_Single using insufficient data.
Request a Set_Attribute_Single, instance 1. Use xFF for each byte shown for each attribute.
attribute 4, NetRef with 0 bytes of data.
attribute 5, NetProc with 0 bytes of data.
Procedure Definition
Initialization
The Acknowledge Handler object must be available. Log object name and object test revision.
Message Connection
Establish an Explicit Messaging Connection. Set the EPR = 0.
1) Class attribute access rules test.
Request a Get_Attribute_Single service addressed to the class, Instance ID zero, to access
attributes 00 - 99. Save the returned value for each Get_Attribute_Single request
Pass: The expected response from table below for each Get_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Service_Not_Supported (x08), Attribute_Not_Supported (x14)]
Revision (01) [UINT (1), Service_Not_Supported, Attribute_Not_Supported]
Max_Instance (02) [UINT(1..65535), Service_Not_Supported, Attribute_Not_Supported]
Num_Instances (03) [UINT, Service_Not_Supported, Attribute_Not_Supported]
Optional_Attribute_List (04) [(UINT, UINT[size]), Service_Not_Supported, Attribute_Not_Supported]
Optional_Service_List (05) [(UINT, UINT[size]), Service_Not_Supported, Attribute_Not_Supported]
Max_Class_Attribute_Id (06) [UINT(6..199), Service_Not_Supported, Attribute_Not_Supported]
Max_Instance_Attribute_Id (07) [UINT(3..199), Service_Not_Supported, Attribute_Not_Supported]
Undefined (08..99) [Service_Not_Supported, Attribute_Not_Supported]
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Attribute (00..99) [Service_Not_Supported (x08)]
Note 1: EPATH encoding is defined in the CIP Specification, Volume 1, Appendix C, Abstract
Syntax Encoding for Segment Types. The expected values for a EPATH are as follows.
Segment Type (bits 7, 6, 5) - 1, Logical Segment.
Logical Format (bits 4, 3, 2) - 0, 1, 4; Class ID, Instance ID, Attribute ID.
Logical Data Format (bits 1, 0) - 0, 1; 0 = USINT(1..255), 1 = UINT(1..65535).
An EPATH must specify Class ID, and Instance ID. Attribute ID is optional.
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (code) [Expected Responses]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Object–specific Service, 75 - 99, addressed to a valid Instance ID.
Pass: The expected response from table below for each Object–specific Service request.
Service Name (Code) [Expected Responses]
Add_Ack_Data_Path (75) [Success_Response, Service_Not_Supported (x08)]
Remove_Ack_Data_Path (76) [Success_Response, Service_Not_Supported (x08)]
Object–specific Codes (77..99) [Service_Not_Supported (x08)]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
5.1) Ack Timer Error Test
If the Ack_Timer attribute is settable, send a Set_Attribute_Single request, data = 0.
Pass: Error_Response, 94 09 FF, Invalid_Attribute_Value.
5.1) COS_Producing_Connection_Instance Error Test
If the COS_Producing_Connection_Instance is settable, send a Set_Attribute_Single request, data = 0.
Pass: Error_Response, 94 09 FF, Invalid_Attribute_Value.
5.3) Add_AckData_Path Error Test, if Add_AckData_Path is implemented
5.3.1) Add path, invalid path sizes
Send an Add_AckData_Path request with invalid path size too large.
Pass: Error_Response, 94 20 FF, Invalid_Parameter.
Send an Add_AckData_Path request with invalid path size too small.
Pass: Error_Response, 94 20 FF, Invalid_Parameter.
5.3.2) Add path, invalid attribute and class
Send an Add_AckData_Path request with invalid attribute.
Pass: Error_Response, 94 20 FF, Invalid_Parameter.
Send an Add_AckData_Path request with invalid class.
Pass: Error_Response, 94 20 FF, Invalid_Parameter.
5.3.3) Remove path, Invalid Instance
Send a Remove_AckData_Path request with invalid instance Id.
Pass: Error_Response, 94 20 FF, Invalid_Parameter.
6) Behavior tests.
Send an Allocate request, choice = COS or Cyclic.
Note: Steps 6.1 through 6.15 are done for both Change of State and Cyclic connections.
6.1) Ack Handler Attribute, I/O Cxn State = Configuring
Send a Get_Attribute_Single request to the Ack_Timer attribute.
Pass: Service_Success, value = 16.
Send a Get_Attribute_Single request to the Retry_Limit attribute.
Pass: Service_Success, value = 1.
Send a Get_Attribute_Single request to the COS_Producing_Connection_Instance attribute.
Pass: Service_Success, value = 4.
The Optional attributes are verified only if they are implemented.
Send a Get_Attribute_Single request to the Ack_List_Size attribute.
Pass: Success_Response, value = 0.
Send a Get_Attribute_Single request to the Ack_List attribute.
Pass: Success_Response, value = NULL.
Send a Get_Attribute_Single request to the Data_With_Ack_Path_List_Size attribute.
Pass: Success_Response, value = 0.
Send a Get_Attribute_Single request to the Data_With_Ack_Path_List attribute.
Pass: Success_Response, value = NULL.
6.2) Ack_Timer rounding test.
Pass: device produces no I/O data. The Acknowledgment data was recognized.
6.8) Send invalid Ack, then valid Ack
Consume the device I/O data production based on the actual EPR returned from Set EPR.
Determine time interval of the I/O data transmission.
Pass: device produces I/O data upon expiration of the Transmission Trigger Timer.
Send an Acknowledge I/O message, size = Consumed Connection Size + 1 byte.
Start an internal test timer.
Check the I/O input buffer.
Determine time interval of the I/O data transmission.
Pass: device produces I/O data when the Ack_Timer expires.
Send an Acknowledge I/O message, size = Consumed Connection Size.
Start an internal test timer.
Check the I/O input buffer.
Pass: device produces no I/O data. The Acknowledgment data was recognized.
6.9) Acknowledge Handler Attributes, State = Active
Send a Get_Attribute_Single request to the Ack_Timer attribute.
Pass: Service_Success, value = actual Ack_Timer value.
Send a Get_Attribute_Single request to the Retry_Limit attribute.
Pass: Service_Success, value = 1.
Send a Get_Attribute_Single request to the COS_Producing_Connection_Instance attribute.
Pass: Service_Success, value = 4.
The Optional attributes are verified only if they are implemented.
Send a Get_Attribute_Single request to the Ack_List_Size attribute.
Pass: Success_Response, value = 1.
Send a Get_Attribute_Single request to the Ack_List attribute.
Pass: Success_Response, value = 4, or Dynamically created instance Id.
Send a Get_Attribute_Single request to the Data_With_Ack_Path_List_Size attribute.
Pass: Success_Response, value = 0.
Send a Get_Attribute_Single request to the Data_With_Ack_Path_List attribute.
Pass: Success_Response, value = NULL.
6.10) Retry Limit Test. Test is done only if the Retry_Limit is Settable.
Consume the device I/O data production based on the actual EPR returned from Set EPR.
Consume the device I/O data production, retry
Send a Set_Attribute_Single request to the Retry_Limit, value = 2.
Consume the device I/O data production based on the actual EPR returned from Set EPR.
Consume the device I/O data production, retry
Consume the device I/O data production, 2nd retry
Send an Acknowledge I/O message, size = Consumed Connection Size.
Start an internal test timer.
Pass: Error_Response, 9416 ff Object_Does_Not_Exist, if Ack Handler deleted. Skip step 6.15.
Send a Get_Attribute_Single request to the Retry_Limit attribute.
Pass: Service_Success, value = 1.
Send a Get_Attribute_Single request to the COS_Producing_Connection_Instance attribute.
Pass: Service_Success, value = 4.
The Optional attributes are verified only if they are implemented.
Send a Get_Attribute_Single request to the Ack_List_Size attribute.
Pass: Success_Response, value = 0.
Send a Get_Attribute_Single request to the Ack_List attribute.
Pass: Success_Response, value = NULL.
Send a Get_Attribute_Single request to the Data_With_Ack_Path_List_Size attribute.
Pass: Success_Response, value = 0.
Send a Get_Attribute_Single request to the Data_With_Ack_Path_List attribute.
Pass: Success_Response, value = NULL.
6.16) Dynamic Acknowledge Handler Test.
Create and configure a Dynamic Ack Handler Instance.
Create and configure a Dynamic I/O connection for Change of state behavior.
Set the Consumed Connection Path to the created Ack Handler Instance.
6.17) Add_AckData_Path Test. If Add_AckData_Path is implemented
Add_AckData_Path to add 2 path list members for Ack with Data.
Verify the Dynamic Ack Handler behavior according to steps 6.1 through 6.15.
6.18) Delete the Dynamic Acknowledge Handler Instance.
Pass: Success_Response.
Delete the connections at the conclusion of this test and leave the device in the On–Line state.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Request each of the Common Services 00 - 49 addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Common Service request.
Service Name (Code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
(01..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value] [Service_Not_Supported] if no attributes are supported
Reserved (15..49) [Service_Not_Supported]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (Code) [Expected Response]
Reserved (00) [Service_Not_Supported (x08)]
Reserved (01..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Attribute_Not_Supported, Attribute_Not_Settable
(x0E)]
Reserved (17..20) [Service_Not_Supported]
Restore (21) [Success_Response, Service_Not_Supported, Object_State_Conflict(x0C)]
Save (22) [Success_Response, Service_Not_Supported]
Reserved (23..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
5) Error Tests.
5.1) Test the implemented attributes accessible by Set_Attribute_Single using invalid data.
attribute 4, TripClass = 201.
Pass: Error_Response, 94 09 FF, Invalid_Attribute_Value
5.2) Test the implemented attributes accessible by Set_Attribute_Single using insufficient data.
Request a Set_Attribute_Single, instance 1. Use xFF for each byte shown for each attribute.
attribute 3, TripFLCSet with 1 byte of data.
attribute 4, TripClass with 0 bytes of data.
attribute 12, CurrentScale with 0 bytes of data.
Pass: Error_Response, 94 13 FF, Not_Enough_Data for all responses
5.3) Test the implemented attributes accessible by Set_Attribute_Single using too much data.
Request a Set_Attribute_Single, instance 1. Use xFF for each byte shown for each attribute.
attribute 3, TripFLCSet with 4 bytes of data.
attribute 4, TripClass with 2 bytes of data.
attribute 12, CurrentScale with 2 bytes of data.
Pass: Error_Response, 94 15 FF, Too_Much_Data for all responses
6) Behavior tests.
None. The Overload object includes attributes that in general effect behavior that is associated with
the physical system that the device is connected to. This type of behavior is not observable from the
network interface.
6.1) If instance attribute 2, Attribute_List, is implemented,
Request a Get_Attribute_Single, Number_of_Attributes.
Request a Get_Attribute_Single, Attributes_List.
Pass: Success_Response and List size = Number_of_Attributes.
Request a Get_Attribute_Single for each attribute in the list.
Pass: Success_Response and value for each attribute.
Delete the connections at the conclusion of this test and leave the device in the On–Line state.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (Code) [Expected Response]
Reserved (00) [Service_Not_Supported (x08)]
Reserved (01..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Attribute_Not_Settable (x0E) ,
Attribute_Not_Supported (x14)]
Reserved (17..20) [Service_Not_Supported]
Restore (21) [Success_Response, Service_Not_Supported, Object_State_Conflict(x0C)]
Save (22) [Success_Response, Service_Not_Supported]
Reserved (23..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
5.1) Test the implemented attributes accessible by Set_Attribute_Single using invalid data.
attribute 11, Rotation = 2.
attribute 12, KickStart = 2.
attribute 15, EnergySaver = xFF.
Pass: Error_Response, 94 09 FF, Invalid_Attribute_Value
5.2) Test the implemented attributes accessible by Set_Attribute_Single using insufficient data.
Request a Set_Attribute_Single, instance 1. Use xFF for each byte shown for each attribute.
attribute 4, StartMode with 0 bytes of data.
attribute 5, StopMode with 0 bytes of data.
attribute 6, RampMode with 0 bytes of data.
attribute 7, RampTime1 with 1 byte of data.
attribute 8, InitialVoltage1 with 0 bytes of data.
attribute 9, RampTime2 with 1 byte of data.
attribute 10, InitialVoltage2 with 0 bytes of data.
attribute 11, Rotation with 0 bytes of data.
attribute 12, KickStart with 0 bytes of data.
attribute 13, KickStartTime with 0 bytes of data.
attribute 14, KickStartVoltage with 1 byte of data.
attribute 15, EnergySaver with 0 bytes of data.
attribute 16, DecelTime with 1 byte of data.
attribute 17, CurrentLimitSet with 1 byte of data.
attribute 18, BrakingCurrentSet with 1 byte of data.
Pass: Error_Response, 94 13 FF, Not_Enough_Data for all responses
5.3) Test the implemented attributes accessible by Set_Attribute_Single using too much data.
Request a Set_Attribute_Single, instance 1. Use xFF for each byte shown for each attribute.
PUB00166 www.odva.org Page 229 of 344
CIP Object Tests
6) Behavior Test
None. The Softstart object includes attributes that in general effect behavior that is associated with
the physical system that the softstart is connected to. This type of behavior is not observable from
the network interface.
6.1) If instance attribute 2, Attribute_List, is implemented,
Request a Get_Attribute_Single, Number_of_Attributes.
Request a Get_Attribute_Single, Attributes_List.
Pass: Success_Response and List size = Number_of_Attributes.
Request a Get_Attribute_Single for each attribute in the list.
Pass: Success_Response and value for each attribute.
Delete the connections at the conclusion of this test and leave the device in the On–Line state.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
Note 1: The following values are defined and limited by the device profile
Process Control Valve (1D) Instance 1
Attribute Name (ID) [Expected Values, Responses]
Max_Destinations (02) [UINT(2)]
Number_of_Destinations (03) [UINT(2)]
Note 2: The following values are defined and limited by the device profile
Process Control Valve (1D)
Attribute Name (ID) [Expected Values, Responses]
Destination_List (04) [Attribute_Not_Settable]
Algorithm_Type (07) [Attribute_Not_Settable]
Source_Used (08) [Attribute_Not_Settable]
Algorithm_Type (10) [Attribute_Not_Settable]
Object_Source_List (13) [Attribute_Not_Settable]
Destination_Used (14) [Attribute_Not_Settable]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (Code) [Expected Response]
Reserved (00) [Service_Not_Supported (x08)]
(01..4) [Service_Not_Supported]
Reset (05) [Success_Response, Service_Not_Supported]
Start (06) [Success_Response, Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
5.1) Test attributes accessible by Set_Attribute_Single using invalid data.
attribute 4, Destination_List and attribute 13, Object_Source_List = Invalid Object Class.
Pass: Error_Response, 94 05 FF, Path Destination Unknown
Note 1: Values for these attributes are defined and limited by the Device Profile
Mass Flow Controller (1A)
Attribute Name (ID) [Expected Values]
Number_of_Attributes (01) (10..26 + vendor specific)
Device_Type (03) [“MFC”, “MFM”]
Exception_Detail_Alarm (13) Device_Except_Sz = 1, Mfg_Except_Sz = 1
Exception_Detail_Warning (14) Device_Except_Sz = 1, Mfg_Except_Sz = 1
Subclass (99) [UINT (0), Attribute_Not_Supported]
Note 2: Values for these attributes are defined and limited by the Device Profile, Subclass
Note 3: Access for these attributes are defined and limited by the Device Profile, Subclass
Vacuum/Pressure Gauge (1C) SubClass = 5, Hot Cathode Ion Gauge
Attribute Name (ID) [Expected Values]
Energy_Control_Enabled (81) [Success_Response, Attribute_Not_Supported]
Joules_to_Deliver (82) [Success_Response, Attribute_Not_Supported]
Joules_Remaining (83) [UDINT(0), Attribute_Not_Supported]
Active_Target_ID (84) [Success_Response, Attribute_Not_Supported]
Active_Target_Count_Enable(85) [Success_Response, Attribute_Not_Supported]
Active_Target_Life(86) [Success_Response, Attribute_Not_Supported]
Input_Power_On_Time (87) [Attribute_Not_Settable, Attribute_Not_Supported]
Output_Power_On_Time(88) [Attribute_Not_Settable, Attribute_Not_Supported]
Filament_On_Time (89) [Success_Response, Attribute_Not_Supported]
Total_Energy_delivered (90) [Attribute_Not_Settable, Attribute_Not_Supported]
Power_On_Cycle_Counter (91) [Attribute_Not_Settable, Attribute_Not_Supported]
Output_On_Cycle_Counter (92) [Attribute_Not_Settable, Attribute_Not_Supported]
Overtemp_Event_Counter (93) [Attribute_Not_Settable, Attribute_Not_Supported]
Reg_Alarm_Event_Counter(94) [Attribute_Not_Settable, Attribute_Not_Supported]
Filament_Power_Enable (95) Success_Response, Attribute_Not_Supported]
Output_Power_Enable(96) [Success_Response, Attribute_Not_Supported]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (code) [Expected Responses]
(00..4) [Service_Not_Supported (x08)]
Reset (05) [Success_Response]
Start (06) [Success_Response]
Stop (07) [Success_Response, Service_Not_Supported]
(08..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Attribute_Not_Settable (x0E)]
Reserved (17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..104) [Success_Response , Service_Not_Supported] Profile Specific
5) Error Tests.
5.1) For each attribute that is implemented with Set access,
Request a Set_Attribute_Single service, Alarm_Enable = 254.
Request a Set_Attribute_Single service, Warning_Enable = 254.
Request a Set_Attribute_Single service, Maintenance_Warning_Enable = 254.
Pass: For each attribute, Error_Response 94 09 FF, Invalid_Attribute_Value.
5.2) Perform_Diagnostics Service
Request a Perform_Diagnostics service, TestID = 1..63.
Pass: For each value, Error_Response 94 20 FF, Invalid_Parameter.
Request a Perform_Diagnostics service, TestID = values 64..127 not defined in Device Profile.
Pass: For each value, Error_Response 94 20 FF, Invalid_Parameter.
6) Behavior tests.
6.1) Exception_Status Test
Request a Get_Attribute_Single, Exception_Status.
Pass: bit 3 = 0 for MFC
6.2) Exception_Detail Test, if Exception_Status bit 7 = 1
Request a Get_Attribute_Single, Exception_Detail_Alarm.
Pass: Success_Response
Exception_Detail Structure Check
For each non-zero Common_Except_Sz, verify each detail byte.
Pass: Size = 2
Pass: Common_Exception_Detail[0] bits 5 and 7 = 0.
Pass: Common_Exception_Detail[1] bits 1 and 7 = 0.
Profile Specific Alarm/Warning Checks
Verify the message data length is >= 5 < 8 for MFC.
Verify the message data length is >= (4 + (2 * number of gauges)) for VPG, Alarm _Detail
Verify the message data length is >= (4 + (3 * number of gauges)) for VPG, Warning _Detail
Verify the message data length is >= 9 < 12 for PCV.
For each non-zero Device_Except_Sz, verify each detail byte.
Pass: Size = 1 for MFC
Pass: Device Alarm_Exception_Detail bits 0, 6 and 7 = 0.
Pass: Device Warning_Exception_Detail bits 6 and 7 = 0.
Pass: Size = 5 for PCV
Pass: Device Alarm_Exception_Detail byte 4, bits 2 - 7 = 0.
Pass: Device Warning_Exception_Detail byte 4, bits 2 - 7 = 0.
For Mfg_Except_Sz.
Pass: Mfg_Except_Sz = 0 or 1 for MFC, VPG, PCV
Repeat step 6.2 to verify the Exception_Detail_Warning attribute Structure
6.3) Alarm_Enable and Warning_Enable Test
Note C1: Values for these attributes are defined and limited by the Device Profile
Vacuum/Pressure Gage (1B) Subclass = 1, Instance Selector
Attribute Name (ID) [Expected Values, Responses]
Active_Value (94) [INT, or defined by Data_Type, Attribute_Not_Supported]
Active_Instance_Number (95) [UINT(1), Attribute_Not_Supported]
Number_of_Gauges (96) [USINT, Attribute_Not_Supported]
Subclass (99) (1)
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Note 1: Values for these attributes are defined and limited by the Device Profile
Note 2: These attributes are defined and limited by the Device Profile
Mass Flow Controller (1A)
Attribute Name (ID) [Expected Values, Responses]
Number_of_Attributes (01) (3..38)
Data_Type (03) (0xC3 (default) , 0xCA)
Data_Units (04) (0x1001(default), 0x1400..0x1410)
Offset_A_Data_Type (11) (0xC3(default), 0xCA)
Gain_Data_Type (13) (0xC3, 0xCA(default))
Produce_Trigger_Delta (34) [INT(0), or defined by Data_Type, Attribute_Not_Supported]
Subclass (99) (0, 1)
Note 3: Values for these attributes are defined and limited by the Device Profile
Mass Flow Controller (1A) Suubclass =1, Flow Diagnostics
Attribute Name (ID) [Expected Values]
Flow_Totalizer (95) [Success_Response, Attribute_Not_Supported]
Flow_Hours (96) [Success_Response, Attribute_Not_Supported]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (code) [Expected Responses]
Reserved (00..13) [Service_Not_Supported (x08)]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Attribute_Not_Settable (x0E)]
Reserved (17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Object–specific Service, 75 - 99, addressed to a valid Instance ID.
Pass: The expected response from table below for each Object–specific Service request.
Request each Object–specific Service, 75 - 99, addressed to a valid Instance ID.
Pass: The expected response from table below for each Object–specific Service request.
Service Name (Code) [Expected Responses]
Zero_Adjust (75) [Success_Response, Service_Not_Supported (x08)]
Gain_Adjust (76) [Success_Response, Service_Not_Supported]
Object–specific Codes (77..99) [Service_Not_Supported] Note 4
Note 4: These subclass specific services are defined and limited by the Device Profile
Vacuum/Pressure Gauge (1C) SubClass = 4, Cold Cathode Ion Gauge
Service Name (Code) [Expected Responses]
Set_High_Voltage_State (98) [Success_Response, Object_State_Conflict]
Clear_High_Voltage_Off_Alarm(99) [Success_Response, Object_State_Conflict]
Request each Reserved Service, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..104) [Success_Response , Service_Not_Supported] Profile Specific
Reserved Codes (105..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
5.1) For each attribute that is implemented with Set access,
Request a Set_Attribute_Single service, Alarm_Enable = 254.
Request a Set_Attribute_Single service, Warning_Enable = 254.
Request a Set_Attribute_Single service, AutoZero_Enable = 254.
Request a Set_Attribute_Single service, AutoRange_Enable = 254.
Request a Set_Attribute_Single service, Safe_State = 4..50.
Request a Set_Attribute_Single service, Data_Type = (0x00..0xFF, except 0xC3, 0xCA).
Request a Set_Attribute_Single service, Data_Units = Invalid Values, see Note 1
Profile Integer Input Integer Output Floating Point Input Floating Point Output
MFC 6 7 18 19
V/PG 2 4 (if implemented)
PCV 2 18 7 23
FFC 1 10 2 11
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Note 1: Values for these attributes are defined and limited by the Device Profile
Mass Flow Controller (1A)
Attribute Name (ID) [Expected Values]
Number_of_Attributes (01) (3..23)
Data_Type (03) (0xC3 (default) , 0xCA)
Data_Units (04) (0x1001(default), 0x1400..0x1410)
Gain_Data_Type (12) (0xC3, 0xCA(default))
Subclass (99) (0)
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
(01..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Attribute_Not_Settable (x0E)]
Reserved (17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..104) [Success_Response , Service_Not_Supported] Profile Specific
5) Error Tests.
5.1) For each attribute that is implemented with Set access,
Request a Set_Attribute_Single service, Alarm_Enable = 254.
Request a Set_Attribute_Single service, Warning_Enable = 254.
Request a Set_Attribute_Single service, Safe_State = 4..50.
Request a Set_Attribute_Single service, Data_Type = (0x00..0xFF, except 0xC3, 0xCA).
Request a Set_Attribute_Single service, Data_Units = Invalid Values, see Note 1
Pass: For each attribute, Error_Response 94 09 FF, Invalid_Attribute_Value.
6) Behavior tests.
6.1) Attribute Access when S-Analog Sensor is in Executing state.
Request an S-Device Supervisor Start service.
Request a Get_Attribute_Single, S-Device Supervisor, Device_Status.
If Device_Status does not = 4, Executing., skip to step 6.2.
Request a Set_Attribute_Single, Data_Type.
Pass: Error_Response, 94 0C ff, Object State Conflict.
Request a Set_Attribute_Single, Gain_Data_Type.
Pass: Error_Response, 94 0C ff, Object State Conflict.
Request a Set_Attribute_Single, Value.
Pass: Success_Response
6.2) Data_Type configuration for Assembly Instances, MFC, V/PG and PCV
MFC - input/output assembly instances, integer = 6/7, floating point = 18/19
V/PG - input assembly instances, integer = 2, floating point = 4 (if implemented)
PCV - input/output assembly instances, integer = 2/18, floating point =7/23
Open an I/O connection
Configure the produced and consumed connection path to integer data type assembly.
Request a Set_Attribute_Single, I/O EPR = 1000ms.
Verify the Produced and Consumed Connection Sizes.
Pass: Produced and Consumed Sizes = Connection sizes of assembly 6 and 7.
Request a Set_Attribute_Single, Data_Type.
Pass: Error_Response, 94 0C ff, Object State Conflict.
Close/Release the I/O connection.
Open an I/O connection.
Configure the produced and consumed connection path to floating type assembly instance.
Verify the Produced and Consumed Connection Sizes.
Pass: Produced and Consumed Sizes = Floating Point Defaults.
Request a Set_Attribute_Single, I/O EPR = 1000ms.
Request a Get_Attribute_Single, Data_Type.
Pass: Success_Response, 0xCA (REAL).
Close/Release the I/O connection.
PUB00166 www.odva.org Page 267 of 344
CIP Object Tests
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Note 1: Values for these attributes are defined and limited by the Device Profile
Note 2: Values for these attributes are defined and limited by the Device Profile
Mass Flow Controller (1A)
Attribute Name (ID) [Expected Values, Responses]
Number_of_Attributes (01) (4..20)
Data_Type (03) (0xC3 (default) , 0xCA)
Data_Units (04) (0x1001(default), 0x1400..0x1410)
Process_Variable (07) [Attribute_Not_Supported]
CV_Data_Type (08) [Attribute_Not_Supported]
Control_Variable (09) [Attribute_Not_Supported]
Subclass (99) (0)
Note 3: Values for these attributes are defined and limited by the Device Profile
Note 4: Values for these attributes are defined and limited by the Device Profile
Mass Flow Controller (1A)
Attribute Name (ID) [Expected Responses]
Process_Variable (07) [Attribute_Not_Supported]
CV_Data_Type (08) [Attribute_Not_Supported]
Control_Variable (09) [Attribute_Not_Supported]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
(01..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Attribute_Not_Settable (x0E)]
Reserved (17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Note 5: These subclass specific services are defined and limited by the Device Profile
Process Control Valve (1D) SubClass = 1, PID and Source Select
Request each Reserved Service, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
5.1) For each attribute that is implemented with Set access,
Request a Set_Attribute_Single service, Data_Type = (0x00..0xFF, except 0xC3, 0xCA).
Request a Set_Attribute_Single service, Data_Units = (0x0000, 0x1000).
Request a Set_Attribute_Single service, Alarm_Enable = 254.
Request a Set_Attribute_Single service, Warning_Enable = 254.
Request a Set_Attribute_Single service, Safe_State = 4..127.
Request a Set_Attribute_Single service, Process_Variable_Source = 4..255.
Pass: For each attribute, Error_Response 94 09 FF, Invalid_Attribute_Value.
5.2) Service Test, for implemented services,
Request a Calibrate service, with parameter = 2..255
Pass: Error_Response 94 20 FF, Invalid_Parameter.
5.3) Output Limit Maximum, (for RF/DC Generator subclass)
Request a Set_Attribute_Single, Output_Limit, value = beyond Output_Max.
Pass: Error_Response 94 09 FF, Invalid_Attribue_Value.
5.4) Frequency Limit Test, (for Frequency Control subclass)
Request a Set_Attribute_Single, Frequency_Low_Limit, value = beyond Minimum_Frequency.
Pass: Error_Response 94 09 FF, Invalid_Attribue_Value.
Request a Set_Attribute_Single, Default_Frequency, value = beyond Minimum_Frequency.
Pass: Error_Response 94 09 FF, Invalid_Attribue_Value.
Request a Set_Attribute_Single, Frequency_Low_Limit, value = beyond Maximum_Frequency.
Pass: Error_Response 94 09 FF, Invalid_Attribue_Value.
Request a Set_Attribute_Single, Default_Frequency, value = beyond Maximum_Frequency.
Pass: Error_Response 94 09 FF, Invalid_Attribue_Value.
6) Behavior tests.
Note: Only implemented attributes and services are tested in the Behavior test
6.1) Attribute Access when S-Analog Sensor is in Executing state.
Request an S-Device Supervisor Start service.
Request a Get_Attribute_Single, S-Device Supervisor, Device_Status.
If Device_Status does not = 4, Executing., skip to step 6.2.
Request a Set_Attribute_Single, Data_Type.
Pass: Error_Response, 94 0C ff, Object State Conflict.
Request a Set_Attribute_Single, CV_Data_Type.
Note 3: Values for these attributes are defined and limited by the Device Profile
Mass Flow Controller (1A)
Attribute Name (ID) [Expected Values]
Calibration_Pressure (95) [Attribute_Not_Settable, Attribute_Not_Supported]
Calibration_Temperature(96) [Attribute_Not_Settable, Attribute_Not_Supported]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
(01..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Attribute_Not_Settable (x0E)]
Reserved (17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Object–specific Service, 75 - 99, addressed to a valid Instance ID.
Pass: The expected response from table below for each Object–specific Service request.
Request each Object–specific Service, 75 - 99, addressed to a valid Instance ID.
Pass: The expected response from table below for each Object–specific Service request.
Service Name (Code) [Expected Responses]
Object–specific Codes (75..99) [Service_Not_Supported (x08)]
Request each Reserved Service, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..104) [Success_Response , Service_Not_Supported] Profile Specific
Reserved Codes (105..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
No additional Error Tests required.
6) Behavior tests.
6.1) Gas Calibration Instance Test.
Request a Get_All_Instances service.
Pass: Success_Response and list of instances.
Request Get_Attribute_Single Gas_Std_Number, for each Instance in the list.
Pass: Success_Response.
Pass: Gas_Std_Number from instance = Gas_Std_Number in list.
Request Get_Attribute_Single Valid_Sensor_Instance, for each Instance in the list.
Pass: Success_Response and instance X.
Pass: instance X = Valid_Sensor_Instance in list.
If X > 0, Request Get_Attribute_Single S-Analog Sensor, instance X, Value.
Pass: Success_Response.
6.2) Non-Volatile attributes Test.
Request a Set_Attribute_Single for each settable attribute, non-default value.
Request a Get_Attribute_Single for each implemented attribute.
Request an Identity Object Reset, type = 0.
PUB00166 www.odva.org Page 283 of 344
CIP Object Tests
When the Network Access is complete, request a Get_Attribute_Single for each implemented
non-volatile attribute.
Pass: Each value = pre-Reset value.
6.3) If Instance attribute 2, Attribute_List, is implemented,
Request a Get_Attribute_Single, Number_of_Attributes.
Request a Get_Attribute_Single, Attributes_List.
Pass: Success_Response and List size = Number_of_Attributes.
Request a Get_Attribute_Single for each attribute in the list.
Pass: Success_Response and value for each attribute.
Delete the connections at the conclusion of this test and leave the device in the On–Line state.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Note 1: Values for these attributes are defined and limited by the Device Profile
Vacuum/Pressure Gage (1B)
Attribute Name (ID) [Expected Values, Responses]
Number_of_Attributes (01) (5..17)
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
(01..13) [Service_Not_Supported]
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Attribute_Not_Settable (x0E)]
Reserved (17..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Object–specific Service, 75 - 99, addressed to a valid Instance ID.
Pass: The expected response from table below for each Object–specific Service request.
Request each Object–specific Service, 75 - 99, addressed to a valid Instance ID.
Pass: The expected response from table below for each Object–specific Service request.
Service Name (Code) [Expected Responses]
Object–specific Codes (75..99) [Service_Not_Supported (x08)]
Request each Reserved Service, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..104) [Success_Response , Service_Not_Supported] Profile Specific
Reserved Codes (105..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
5.1) For each attribute that is implemented with Set access,
Request a Set_Attribute_Single service, High_Trip_Enable = 254.
Request a Set_Attribute_Single service, Low_Trip_Enable = 254.
Request a Set_Attribute_Single service, Polarity = 254.
Request a Set_Attribute_Single service, Override = 4..254.
Request a Set_Attribute_Single service, Data_Units = 0x00ff..0x07ff.
Pass: For each attribute, Error_Response 94 09 FF, Invalid_Attribute_Value.
6) Behavior tests.
Note: Only implemented attributes and services are tested in the Behavior test
Pressure/Vacuum Gage profile:
Set the S-Device Supervisor object state = executing.
6.1) High/Low Trip Point behavior.
Get the Source and Destination attributes
Verify that the Source and Destination are two bytes long, byte 1 = 0x24.
Get the Polarity attribute value; use it to determine the output value.
Get the Delay attribute value; use it for Delay in test procedure.
6.1.1) Low Trip Test.
Note: This test requires the minimum and maximum values of the High and Low Trip Point
attributes to be used to set the Trip Point values in the test.
Set the High Trip Enable = 0.
Set the Low Trip Point = Low Trip Point maximum.
Set a test timer = the value of the Delay attribute, wait for timer to expire.
Get the Status and the Output.
Pass: Status = Output = TRUE.
Get the value of the Destination.
Pass: Output = Destination.
Set the Low Trip Point = Low Trip Point minimum
Set a test timer = the value of the Delay attribute, wait for timer to expire.
Get the Status and the Output.
Pass: Status = Output = FALSE.
Get the value of the Destination.
Pass: Output = Destination.
Set the High Trip Enable = 1.
6.1.2) High Trip Test.
Set the Low Trip Enable = 0.
Set the High Trip Point = High Trip Point minimum.
Set a test timer = the value of the Delay attribute, wait for timer to expire.
Get the Status and the Output.
Pass: Status = Output = TRUE.
Get the value of the Destination.
Pass: Output = Destination.
Set the High Trip Point = High Trip Point maximum.
Set a test timer = the value of the Delay attribute, wait for timer to expire.
Get the Status and the Output.
Pass: Status = Output = FALSE.
Get the value of the Destination.
Pass: Output = Destination.
Set the Low Trip Enable = 1.
6.1.3) Delay Timer Test.
set the value of the Delay attribute = 100ms.
Repeat step 6.1.1 and 6.1.2
set the Delay attribute = 0.
6.1.4) High/Low Trip Disabled Test.
set the Low Trip Point Enable = 0.
Repeat step 6.1.1 and 6.1.2, Status and Output will remain FALSE
set the Low Trip Point Enable = 1.
set the High Trip Point Enable = 0.
Repeat step 6.1.1 and 6.1.2, Status and Output will remain FALSE
set the High Trip Point Enable = 1.
6.2) Hysteresis behavior.
To be developed.
6.3) Non-Volatile attributes Test.
Request a Set_Attribute_Single for each settable attribute, non-default value.
Request a Get_Attribute_Single for each implemented attribute.
Request an Identity Object Reset, type = 0.
When the Network Access is complete, request a Get_Attribute_Single for each implemented
non-volatile attribute.
Pass: Each value = pre-Reset value.
6.4) If Instance attribute 2, Attribute_List, is implemented,
Request a Get_Attribute_Single, Number_of_Attributes.
Request a Get_Attribute_Single, Attributes_List.
Pass: Success_Response and List size = Number_of_Attributes.
Request a Get_Attribute_Single for each attribute in the list.
Pass: Success_Response and value for each attribute.
Delete the connections at the conclusion of this test and leave the device in the On–Line state.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (Code) [Expected Response]
(00..05) [Service_Not_Supported (x08)]
Start (06) [Success_Response, Service_Not_Supported]
Stop (07) [Success_Response, Service_Not_Supported]
(08) [Service_Not_Supported]
Delete (09) [Success_Response, Service_Not_Supported]
(10..13) [Service_Not_Supported]
Get_Attribute_Single (14) [Success_Response]
Reserved (15) [Service_Not_Supported]
Set_Attribute_Single (16) [Success_Response, Service_Not_Supported, Attribute_Not_Supported,
Attribute_Not_Settable (x0E)]
Reserved (17..20) [Service_Not_Supported]
Restore (21) [Success_Response, Service_Not_Supported]
Save (22) [Success_Response, Service_Not_Supported]
Reserved (23) [Service_Not_Supported]
Get_Member (24) [Success_Response, Service_Not_Supported]
Reserved (25..49) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
According to the value of this attribute, verify required services for this instance is
implemented.
If state = File Empty, verify every attribute in this File instance contains correct value.
Perform Download Test if the device supports such service (see 6.3)).
If Clear service is implemented, Perform Clear Test after file is downloaded successfully.
Recover original file after Clear service.
6.3) Download Test if File Type is Read/Write and Object State is File Empty
Request an Upload_Transfer.
Request a Download_Transfer.
Request a Save.
Pass: Error_Response, 0x0C Object State Conflict for all requests
Request an Initiate_Download, File Size = 2048, Format Version, Revision = 1.1, Name = Test.
Pass: Success_Response, Incremental_Burn, Burn_Time, Transfer_Size
If Error_Response, Size Too Big, decrease File Size until Success_Response.
Request a Get_Attribute_Single, State
Pass: Success_Response, State = 4, Transfer Download Initiated
State = Transfer Download Initiated
Request an Initiate_Upload.
Request an Initiate_Partial_Read.
Request an Upload_Transfer.
Request a Save.
Request a Restore.
Pass: Error_Response, 0x0C, Object State Conflict for all requests
Request an Initiate_Download, File Size = 2048, Format Version, Revision = 1.1, Name = Test.
Request a Download_Transfer, Transfer Number = 0, Type = first.
Pass: Success_Response, with correct Transfer Number
Request a Get_Attribute_Single, State
Pass: Success_Response, State = 6, Transfer Download in Progress
State = Transfer Download in Progress
Request an Initiate_Upload.
Request an Initiate_Partial_Read.
Request an Upload_Transfer, Transfer Number = 0.
Request a Save.
Request a Restore.
Pass: Error_Response, 0x0C, Object State Conflict for all requests
Request a Download_Transfer, Transfer Number = 0, Type = first.
Pass: Error_Response, 0x0C, Object State Conflict
Request a Download_Transfer, Transfer Number = 2, Type = middle.
Pass: Error_Response, 0x20 0x06, Out of Sequence
Request a Download_Transfer, Transfer Number = 1, Type = first.
Pass: Error_Response, 0x20 0x06, Out of Sequence
Request a Get_Attribute_Single, State
Pass: Success_Response, State = 1, File Empty
Re-initialize the download and download first transfer, repeat first packet, all should success.
Request a Download_Transfer, Transfer Number = 2, Type = first.
Pass: Error_Response, 0x20 0x06, Out of Sequence
Request a Get_Attribute_Single, State
Pass: Success_Response, State = 1, File Empty
Re-initialize the download and transfer up to the last type (first and all middle types)
Request a Download_Transfer, Transfer Number = N, Type = last, Checksum = missing.
Pass: Error_Response,0x D0, Fail on Checksum
Request a Get_Attribute_Single, State
Pass: Success_Response, State = 1, File Empty
Re-initialize the download and transfer up to the last type (first and all middle types)
Transfer Size = Small enough to force rollover
Request a Download_Transfer to transfer last packet, Type = last, Checksum = invalid.
Pass: Error_Response, 0xD0, Fail on Checksum
Request a Get_Attribute_Single, State
Pass: Success_Response, State = 1, File Empty
Re-initialize the download and transfer up to the last type (first and all middle types)
Transfer Size = Server Transfer Size
Re-send the previous packet (to verify that server discards it)
Request a Download_Transfer, Transfer Number = N, Type = Last, Checksum = valid.
Pass: Success_Response, with correct Transfer Number
6.6) Clear Test, and Clean-Up if Clear service is supported in this instance.
Request a Clear
Pass: Success_Response
Request a Get_Attribute_Single, State
Pass: Success_Response, State = 1, File Empty
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
instance 1 through first instance found. Any response other than Object_Does_Not_Exist (x16)
indicates an instance is found. Use found instance ID for any tests that require an instance.
Request a Get_Attribute_Single service (x0E) addressed to a valid instance to access attributes
00 - 99. Save the returned value for each Get_Attribute_Single request.
Pass: The expected response from table below for each Get_Attribute_Single request. This test
also validates the size of all strucutre type attributes.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
Attributes 1..15 [Validate size]
Attirbutes 16, 17 [Validate size (0 to 255), Attribute_Not_Supported (x14)]
DomainNumber (18) 0 to 127
Clock Type (19) (0..31)
20-28 Validate size
Undefined (29..99) [Attribute_Not_Supported]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Service Name (code) [Expected Responses]
(01...02) [Service_Not_Supported (x08)]
Get_Attributes_List (03) Success
Set_Attributes_list (04) Success
Get_Attribute_Single (14) [requested value]
Reserved (15) [Service_Not_Supported]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
There are no error tests for the Time Sync object.
6) Behavior tests.
6.1) Non-Volatile attributes Test
Set NV attributes to values other than the default.
Type 0 Reset the device
Request a Get_Attribute_Single for each implemented NV attribute.
Pass: Each value = previously set value.
Restore the original value for each NV attribute.
Note: The behavior test for this object is under development. Contact ODVA for details.
Delete the connections at the conclusion of this test and leave the device in the On–Line state.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each of the Reserved Services, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests
None.
6) Behavior Tests.
For each Port instance, check the Port Type and characteristic is consistent.
Check the Port Routing Capability of each Port instance. In the future may do behavior test
according to its capability.
Delete the connections at the conclusion of this test and leave the device in the On–Line state.
Procedure Definition
Initialization
The Base Energy Object must be available. Log the object name and object test revision.
Message Connection
Establish an Explicit Messaging Connection. Set the EPR = 0.
1) Class attribute access rules test.
Request a Get_Attribute_Single service (x0E) addressed to the class, Instance ID zero, to access
all the object supported attributes. Save the returned value for each Get_Attribute_Single
request.
Pass: The expected response from table below for each Get_Attribute_Single request, or the
status code is 0x08 (Service not supported) if none of the class attributes is implemented.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
all object supported attributes. Use data returned by the appropriate Get_Attribute_Single
service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Request a Set_Attribute_Single service (x10) addressed to a valid instance to access all object
supported attributes. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request, or
Service_Not_Supported (x14) if none of the optional Settable attributes are implemented.
Request each of the Common Services, 0 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
If Get_Attributes_All service is implemented, the response is also validated. The test compares
the attribute value returned from this service to the value received from Get_Attribute_Single
service. For most attributes the values should match. For some changing attributes, such as
odometer readings, the values could be different.
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each of the Reserved Services, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests
Search all implemented settable attributes, set out of range values to these attributes, and verify
getting expected status code 0x09 (Invalid_Attribute_Value).
6) Behavior Tests
6.1) Conditional attributes check.
Check if any conditional attribute (class level or instance level) is required and implemented.
6.2) Conditional services check.
a. Check if any class attribute is implemented. If yes, verify Get_Attribute_Single class service
is also implemented, otherwise return error.
b. Check if Set_Attribute_Single instance service is required and implemented.
6.3) Behavior test for each Base Energy Object instance
6.3.1) Verify Instance Attribute 12 (Energy Type Specific Object Path) points to a valid energy
type specific object instance.
6.3.2) Metering results consistency test
Verify the values reported in the Base Energy Object and the energy type specific objects are
consistent.
6.3.3) Instance level Reset service test
Verify the behavior of Reset type 0, 1, 2 and invalid values if device supports Reset service.
a. Type 0 Reset expected behavior: Reset all Energy Odometers to 0 for the Base
Energy Object and Energy Type Specific Object pointed to by the Energy Type-
Specific Object Path.
b. Type 1 Reset expected behavior: Reset Base Energy Object and Energy Type-
Specific Object pointed to by the Energy Type-specific Object Path to factory
defaults.
c. Type 2 Reset expected behavior: Reset the configuration attributes of the Base
Energy Object and Energy Type-Specific Object pointed to by the Energy Type
Specific Object Path without resetting Energy Odometers.
6.3.4) Object specific services test.
Verify the behavior of Sart_Metering and Stop_Metering services.
6.3.5) Instance level NV attributes behavior test.
Find all implemented NV attributes. Set their values other than the default. Cycle the
power of the device and verify the attributes’ values retaining during the power cycle.
6.4) Class level Reset service test
6.4.1) The test verifies the device behavior of Reset type 0, 1, 2, and invalid values if Class level
Reset service is implemented,
6.4.2) If Class level Reset service is not supported, the test verifies the device returns correct
error code.
Procedure Definition
Initialization
The Electrical Energy Object must be available. Log the object name and object test revision.
Message Connection
Establish an Explicit Messaging Connection. Set the EPR = 0.
1) Class attribute access rules test.
Request a Get_Attribute_Single service (x0E) addressed to the class, Instance ID zero, to access
all the object supported attributes. Save the returned value for each Get_Attribute_Single
request.
Pass: The expected response from table below for each Get_Attribute_Single request, or the
status code is 0x08 (Service not supported) if none of the class attributes is implemented.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
all object supported attributes. Use data returned by the appropriate Get_Attribute_Single
service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Request a Set_Attribute_Single service (x10) addressed to a valid instance to access all object
supported attributes. Use data returned by the appropriate Get_Attribute_Single service.
Electrical Energy Object has none settable attribute, so Set_Attribute_Single service is not
needed.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Service_Not_Supported] (x08)]
Attribute (01-41) [Service_Not_Supported] (x08)]
Undefined (42-99) [Service_Not_Supported] (x08)]
l) Request each of the Common Services, 0 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
If Get_Attributes_All service is implemented, the response is also being validated. The test
compares the attribute value returned from this service to the value received from
Get_Attribute_Single service. For most attributes the values should match. For some changing
attributes, such as odometer readings, the values could be different.
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each of the Reserved Services, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests
Verify there’s no settable attributes.
6) Behavior Tests
For each instance of Electrical Energy Object, check following behaviors:
PUB00166 www.odva.org Page 316 of 344
CIP Object Tests
6.1) Instance Attribute 3 (Real Energy Net Odometer) and attribute 27 (Total Real Power) are
conditional. At least one of them should be implemented.
6.2) Instance Attribute 41 (Associated Base Energy Object Path): shall be valid and point to the
Base Energy Object.
6.3) The value in Attribute 3 (Real Energy Net Odometer) should match the value in the Total
Energy Odometer attribute of the generic Base Energy Object that is pointed to by the Associated
Base Energy Object Path attribute.
Procedure Definition
Initialization
The Non-Electrical Energy Object must be available. Log the object name and object test
revision.
Message Connection
Establish an Explicit Messaging Connection. Set the EPR = 0.
1) Class attribute access rules test.
Request a Get_Attribute_Single service (x0E) addressed to the class, Instance ID zero, to access
all the object supported attributes. Save the returned value for each Get_Attribute_Single
request.
Pass: The expected response from table below for each Get_Attribute_Single request, or the
status code is 0x08 (Service not supported) if none of the class attributes is implemented.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
all object supported attributes. Use data returned by the appropriate Get_Attribute_Single
service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Request a Set_Attribute_Single service (x10) addressed to a valid instance to access all object
supported attributes. Use data returned by the appropriate Get_Attribute_Single service. Non-
Electrical Energy Object has none settable attribute, so Set_Attribute_Single service is not
needed.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Service_Not_Supported] (x08)]
Attribute (01-11) [Service_Not_Supported] (x08)]
Undefined (12-99) [Service_Not_Supported] (x08)]
m)Request each of the Common Services, 0 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
If Get_Attributes_All service is implemented, the response is also validated. The test compares
the attribute value returned from this service to the value received from Get_Attribute_Single
service. For most attributes the values should match. For some changing attributes, such as
odometer readings, the values could be different.
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each of the Reserved Services, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
5) Error Tests
Verify there’s no settable attributes.
6) Behavior Tests
For each instance of Non-Electrical Energy Object, check following behaviors:
6.1) Instance Attribute 3 (Energy Net Odometer) and attribute 9 (Energy Transfer Rate) are
conditional. At least one of them should be implemented.
6.2) Instance Attribute 11 (Associated Base Energy Object Path): shall be valid and point to a Base
Energy Object.
6.3) The value in Attribute 3 Energy Net Odometer, if implemented, should match the value in the
Total Energy Odometer attribute of the generic Base Energy Object that is pointed to by the
Associated Base Energy Object Path attribute.
Procedure Definition
Initialization
The Motion Device Axis Object must be available. Log the object name and object test revision.
Message Connection
Establish an Explicit Messaging Connection. Set the EPR = 0.
1) Class attribute access rules test.
Request a Get_Attribute_Single service (x0E) addressed to the class, Instance ID zero, to access
all the object supported attributes. Save the returned value for each Get_Attribute_Single
request.
Pass: The expected response from table below for each Get_Attribute_Single request.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
all object supported attributes. Use data returned by the appropriate Get_Attribute_Single
service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
Revision (01) [UINT, Attribute_Not_Settable(0x0E)]
Request Get_Attribute_Single service (x0E) addressed to a valid instance to access all object
supported attributes. Save the returned value for each Get_Attribute_Single request.
Because of the large number of instance attributes in the Motion Device Axis Object, this
document does not enumeratethem here . Instead,the general rules used to validate conditional
attribute implementation, valid value enforcement, and Set Access are provided here. Please
refer to the specification for attribute details.
Pass criteria:
All required attributes shall return Success to Get_Attribute_Single request
All implemented Conditional or Optional attributes shall return Success to
Get_Attribute_Single request
The attribute value in the successful response shall be in the data range specified by the
specification.
Not implemented attribute shall return Attribute_Not_Supported(0x14)
Request Set_Attribute_Single service (x10) addressed to a valid instance to access all supported
attributes. Use the data that was previously returned by the corresponding Get_Attribute_Single
service.
Note: According to the MDAO attribute table footnotes as below, those attributes marked as Set *
are expected to return Attribute_Not_Supported (0x14) to the Set_Attribute_Single service.
Set * - Indicates the attribute is normally set by the CIP Motion connection data block and not
by a Set service.
Pass criteria:
All implemented CIP Settable attributes shall return Success to the Set_Attribute_Single
service, otherwise return Attribute_Not_Supported (0x14).
Not implemented attributes shall return Attribute_Not_Supported (0x14)
Request each of the Common Services, 0 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Request each of the Reserved Services, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests
There areno error tests at this time.
6) Behavior Tests
There are no behavior tests at this time.
Note: For CIP Motion compliant devices Module Status LED is required. Axis Status LED is also
required unless the device is equipped with a multi-character alphanumeric display.
Functional Description
This test verifies the:
1) Class attributes access rules and implementation rules for the Originator Connection List Object.
2) Common Service implementations for class and instance.
3) Object–specific and reserved service implementations for class and instance.
4) Conformance when incorrect data is used to access attributes and services.
5) Object behavior accessible from the network.
Procedure Definition
Initialization
The Originator Connection List Object must be available. Log the object name and object test
revision.
Message Connection
Establish an Explicit Messaging Connection. Set the EPR = 0.
1) Class attribute access rules test.
Request a Get_Attribute_Single service (x0E) addressed to the class, Instance ID zero, to access
all the object supported attributes. Save the returned value for each Get_Attribute_Single
request.
Pass: The expected response from table below for each Get_Attribute_Single request.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
all object supported attributes. Use data returned by the appropriate Get_Attribute_Single
service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [[Service_Not_Supported(0x08)]
Revision (01) [Service_Not_Supported(0x08)]
Max_Instance (02) [Service_Not_Supported(0x08)]
Num_Instances (03) [Service_Not_Supported(0x08)]
Optional_Attribute_List (04) [Service_Not_Supported(0x08)]
Optional_Service_List (05) [Service_Not_Supported(0x08)]
Max_Class_Attribute_Id (06) [Service_Not_Supported(0x08)]
Max_Instance_Attribute_Id (07) [Service_Not_Supported(0x08)]
Note: There’s no instance attributes defined for the Originator Connection List Object. So the
Get_Attribute_Single Service (0x0E) and Set_Attribute_Single_Service (0x10) should not be
implemented.
2) Common Services Test
Request each of the Common Services 00 - 49 addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Common Service request.
If Get_Attributes_All service is implemented, the response is also validatedby comparing the
attribute value returned from this service to the values received from Get_Attribute_Single
service. Attribute 1, 2, 3, 8, 9 values should match.
Service Name (Code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
Get_Attributes_All (01) [Success, Service_not_Supported]
Create(08) [Success]
Get_Attribute_Single (14) [Success, Service_not_Supported]
Reserved (all others between 0-49) [Service_Not_Supported]
Request each of the Common Services, 0 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
Pass: The expected response from table below for each Object–specific Service request.
Service Name (Code) [Expected Responses]
Object–specific Codes (75, 77..99) [Service_Not_Supported (x08)]
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each of the Reserved Services, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
4) Error Tests
4.1) Send a Create request 0x08 at class level with Path from originator properties using reserved
bits.
Pass: the DUT shall return 0x20 (Invalid Parameter).
6) Behavior Tests
6.1) Issue a Create request 0x08 with correct parameter
Pass: The DUT creates an OCL instance successfully.
Functional Description
This test verifies the:
1) Class attributes access rules and implementation rules for the Target Connection List Object.
2) Instance attributes access rules and implementation rules for the Target Connection List Object.
3) Common Service implementations for class and instance.
4) Object–specific and reserved service implementations for class and instance.
5) Conformance when incorrect data is used to access attributes and services.
6) Object behavior accessible from the network.
Procedure Definition
Initialization
The Target Connection List Object must be available. Log the object name and object test
revision.
Message Connection
Establish an Explicit Messaging Connection. Set the EPR = 0.
1) Class attribute access rules test.
Request a Get_Attribute_Single service (x0E) addressed to the class, Instance ID zero, to access
all the object supported attributes. Save the returned value for each Get_Attribute_Single
request.
Pass: The expected response from table below for each Get_Attribute_Single request.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
all object supported attributes. Use data returned by the appropriate Get_Attribute_Single
service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
Request Set_Attribute_Single service (x10) addressed to a valid instance to access all supported
attributes. Use the data that was previously returned by the corresponding Get_Attribute_Single
service.
Each attribute shall return Attribute_Not_Supported (0x14) or Service_Not_Supported (0x08).
attribute value returned from this service to the values received from Get_Attribute_Single
service. Attribute 1, 2, 3, 8, 9 values should match.
Service Name (Code) [Expected Responses]
Reserved (00) [Service_Not_Supported (x08)]
Get_Attributes_All (01) [Success, Service_not_Supported]
Get_Attribute_Single (14) [Success_Response]
Reserved (all others between 0-49) [Service_Not_Supported]
Request each of the Common Services, 0 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each of the Reserved Services, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests
5.1) Send a Connection Read request 0x4C at class level Connection Specifier is in range 6 – 99.
Pass: the DUT shall return 0x20 (Invalid Parameter).
6) Behavior Tests
Test class level Connection Read service.
6.1) Issue a Connection Read request 0x4C with Connection Specifier = 1 and Connection Structure
Exclusion = 1 (Connection Name String should be omitted).
6.2) Issue a Connection Read request 0x4C with Connection Specifier = 1 and Connection Structure
Exclusion = 0 (Connection Name String should not be omitted). Compare response data are the
same as above except Connection Name String.
If the device return status 0x011 (Reply data too large), invoke a Large_Forward_Open to make a
new Explicit Connection with the Additional Status Word in the status 0x11 response as the T->O
size. Resend 0x4C request.
Pass: The DUT responds success 0x00 with Additional Status word 0x0000 or 0x0001 to 0x4C
request, and the response data passes verification.
6.3) Continue to send Connection Read request 0x4C with incremental Connection Specifier and
Connection Structure Exclusion = 0 (Connection Name String should not be omitted) if the General
Status is 0 and Additional Status word response is 0x0001 in the previous 0x4C.
Pass: The DUT shall respond success for the current 0x4C request and pass the verification of
response data as described in 6.2).
When the General Status is 0 and Additional Status word response is 0x0000 in the previous 0x4C,
send another Connection Read request 0x4C with incremental Connection Specifier.
Pass: The DUT shall return 0x16 (Object not exists).
Functional Description
This test verifies the:
1) Class attributes access rules and implementation rules for the Power Management Object.
2) Instance attributes access rules and implementation rules for the Power Management Object.
3) Common Service implementations for class and instance.
4) Object–specific and reserved service implementations for class and instance.
5) Conformance when incorrect data is used to access attributes and services.
6) Object behavior accessible from the network.
Procedure Definition
Initialization
The Power Management Object must be available. Log the object name and object test revision.
Message Connection
Establish an Explicit Messaging Connection. Set the EPR = 0.
1) Class attribute access rules test.
Request a Get_Attribute_Single service (x0E) addressed to the class, Instance ID zero, to access
all the object supported attributes. Save the returned value for each Get_Attribute_Single
request.
Pass: The expected response from table below for each Get_Attribute_Single request.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
all object supported attributes. Use data returned by the appropriate Get_Attribute_Single
service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
Revision (01) [UINT, Service_Not_Supported(0x08)]
Max_Instance (02) [UINT, Service_Not_Supported(0x08)]
Num_Instances (03) [UINT, Service_Not_Supported(0x08)]
Optional_Attribute_List (04) [UINT, Service_Not_Supported(0x08)]
Request Set_Attribute_Single service (x10) addressed to a valid instance to access all supported
attributes. Use the data that was previously returned by the corresponding Get_Attribute_Single
service.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
Power Management Command (01) [Attribute_Not_Settable (x0E), Service_Not_Supported (x08)]
Power Management Status (02) [Attribute_Not_Settable (x0E) , Service_Not_Supported (x08)]
Client Path (03) [Attribute_Not_Settable (x0E) , Service_Not_Supported (x08)]
Number of Power Management Modes (04) [Attribute_Not_Settable (x0E) , Service_Not_Supported (x08)]
Power Management Modes (05) [Success, Attribute_Not_Supported, Service_Not_Supported (x08)]
Sleeping State Support (06) [Attribute_Not_Settable (x0E) , Service_Not_Supported (x08)]
Wake from Sleep Units (07) [Attribute_Not_Settable (x0E) , Service_Not_Supported (x08) ,
Attribute_Not_Supported]
Wake from Sleep Time (08) [Attribute_Not_Settable (x0E) , Service_Not_Supported (x08) ,
Request each of the Common Services, 0 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each of the Reserved Services, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
7) Behavior Tests
Power_Management service test: not totally implemented.
Procedure Definition
Initialization
The Power Curtailment Object must be available. Log the object name and object test revision.
Message Connection
Establish an Explicit Messaging Connection. Set the EPR = 0.
1) Class attribute access rules test.
Request a Get_Attribute_Single service (x0E) addressed to the class, Instance ID zero, to access
all the object supported attributes. Save the returned value for each Get_Attribute_Single
request.
Pass: The expected response from table below for each Get_Attribute_Single request.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
all object supported attributes. Use data returned by the appropriate Get_Attribute_Single
service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
Revision (01) [Service_Not_Supported(0x08) , Attribute_Not_Supported]
Max_Instance (02) [Service_Not_Supported(0x08) , Attribute_Not_Supported]
Num_Instances (03) [Service_Not_Supported(0x08) , Attribute_Not_Supported]
Optional_Attribute_List (04) [Service_Not_Supported(0x08) , Attribute_Not_Supported]
Optional_Service_List (05) [Service_Not_Supported(0x08) , Attribute_Not_Supported]
Request Set_Attribute_Single service (x10) addressed to a valid instance to access all supported
attributes. Use the data that was previously returned by the corresponding Get_Attribute_Single
service.
Attribute Name (ID) [Expected Values, Responses]
Undefined (00) [Attribute_Not_Supported (x14)]
Number of Curtailment Levels (01) [Attribute_Not_Settable (x0E), Service_Not_Supported (x08) ]
Curtailment Levels (02) [Attribute_Not_Settable (x0E), Service_Not_Supported (x08) ]
Maximum Number of Curtailment Levels (03) [Attribute_Not_Settable (x0E), Service_Not_Supported (x08) ]
Instance Capabilities (04) [Attribute_Not_Settable (x0E), Service_Not_Supported (x08) ]
Instance Status (05) [Attribute_Not_Settable (x0E), Service_Not_Supported (x08) ]
Instance Options (06) [Attribute_Not_Settable (x0E), Service_Not_Supported (x08), Success ]
Present Curtailment Level ID (07) [Attribute_Not_Settable (x0E), Service_Not_Supported (x08) ]
Present Expected Power (08) [Attribute_Not_Settable (x0E), Service_Not_Supported (x08) ]
Owner Path (09) [Attribute_Not_Settable (x0E), Service_Not_Supported (x08) ]
Uncurtailed Power (10) [Attribute_Not_Settable (x0E), Service_Not_Supported (x08) ]
Request each of the Common Services, 0 - 49, addressed to a valid Instance ID.
Pass: The expected response from table below for each Common Service request.
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Pass: The expected response from table below for each Object–specific Service request.
Request each of the Reserved Services, 100 - 255, addressed to a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported (x08)]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests
Not implemented yet.
8) Behavior Tests
Not implemented yet.
Request a Set_Attribute_Single service (x10) addressed to the class, Instance ID zero, to access
attributes 00 - 99. Use data returned by the appropriate Get_Attribute_Single service.
Pass: The expected response from table below for each Set_Attribute_Single request.
Attribute Name (ID) [Expected Values, Responses]
Any Attribute (00..99) [Service_Not_Supported (x08)]
Request each of the Common Services, 00 - 49, addressed to a valid Instance ID.
Pass: Expected responses for Common Services addressed to the instance level object
Request each Reserved Service, 100 - 255, addressed to the class, Instance ID zero.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
Request each Reserved Service, 100 - 255, addressed to the a valid Instance ID.
Pass: The expected response from table below for each Reserved Service request.
Service Name (Code) [Expected Responses]
Reserved Codes (100..127) [Service_Not_Supported]
Reserved Codes (128..255) [Service_Not_Supported, Invalid_Parameter (x20), No_Response]
5) Error Tests.
5.1)
Request a service
Pass: The expected response
6) Behavior tests.
6.1)
Request a service
Pass: The expected response
Delete the connections at the conclusion of this test and leave the device in the On–Line state.