Chapter 4
NI-DNET Programming Techniques
4-14
ni.com
Specification defines the overall format of these services, in most cases
their meaning and service data are object-specific or vendor-specific.
Unless your device requires such services and documents them in detail,
you probably do not need them for your application.
You need the following information to use the
ncWriteDnetExplMsg
and
ncReadDnetExplMsg
functions for a given explicit messaging service:
•
The class and instance identifiers for the object to which the service
will be directed.
•
The service code used to identify the service.
•
The length and format of service request and response data. Some of
data formats are defined by the service’s overall specification (such as
in Appendix G,
DeviceNet Explicit Services
, in the
DeviceNet
Specification
manual), but many data formats are object-specific or
vendor-specific. For example, for the Reset service, Appendix G
defines the service’s code for use with any object, but its actual data
format is defined in the specification for the Identity Object.
•
The error codes that can be returned in the service response. Error
codes that are common to all services can be found in Appendix H,
DeviceNet Error Codes
, in the
DeviceNet Specification
manual, but
many error codes are specific to the service, object, or vendor.
As with the
ncGetDnetAttribute
and
ncSetDnetAttribute
functions, the service data formats for the request and response are
specified in terms of DeviceNet data types. These DeviceNet data types are
converted to/from the data types of your programming environment (C or
LabVIEW) as discussed in previous sections.
Handling Multiple Devices
This section describes techniques you can use to efficiently implement an
application that communicates with a large number of DeviceNet devices.
In such an application, there might be only one call to
ncOpenDnetIntf
(only one network), but there are usually multiple calls to
ncOpenDnetIO
(and possibly
ncOpenDnetExplMsg
).
Configuration
If the configuration parameters used with
ncOpenDnetIO
tend to change
over time, you might want to organize them in data structures instead of
using constants.