When programming with the SCI the following main concepts are to keep in mind:
Stateless vs. Stateful
The SCI is split into two parts, one providing functionality for stateless applications with a very short lifetime, and one to be used in long running applications that can benefit from using multiple threads, event based communication and internal caching in the SCI library. The stateless part is hosted in a inmationSLI.dll, and self sufficient for developing a stateless application.
The stateful part is hosted in the inmationApi.dll, which itself uses functionality from the stateless part. To develop an application using the SCI in a stateful fashion, both libraries have to be referenced in the project.
Static methods are to be used in an application wide context to initialize, configure, and reset the SCI and its communication with the Core.
A local instance of the SCI is to be used to call individual functions to operate with the object data of the system.
SCI makes use of system paths wherever possible to identify the model element in the system that should be operated on. All model objects including all their properties can be reached via a unique path.
SCI makes use of special object types (also called containers) when calling functions that operate on object data. These containers host the parameters used when executing the called function and also receive the individual return value(s). For example, reading the current value of an object requires a ReadItem instance.
SCI makes use of special object types to return communication results when calling functions that operate on object data. Results returned by methods give back a high level return value, signaling a general communication success or failure. For example the ReadValue function returns a Result object.
The same object type is used in Container objects like the ReadItem. These have a Result property of type Result that signals an object specific method execution success or failure. For example, the readItem instance hosts a Result object set after execution of ReadValue.