Supported Data Flows
NMS to SCADA
Heartbeat
PingURL
The adapter periodically sends PingURL message to the each configured SCADA system. Failure to send the message or error response from SCADA system (reply contains errorObject element) triggers switch to alternate link (if available). Upon restoration of communication with the SCADA system (PingURL has been sent successfully) synchronization sequence is executed.
PingURL Request Example
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<ns4:MultiSpeakMsgHeader xmlns:ns4="http://www.multispeak.org/
Version_4.1_Release" xmlns:ns3="http://www.w3.org/1999/xlink"
xmlns:ns2="gml" xmlns="cpsm" />
</S:Header>
<S:Body>
<ns4:PingURL xmlns:ns4="http://www.multispeak.org/
Version_4.1_Release"
xmlns:ns3="http://www.w3.org/1999/xlink"
xmlns:ns2="gml"
xmlns="cpsm" />
</S:Body>
</S:Envelope>
Synchronization/Integrity Check
The purpose of the synchronization sequence is to bring the state of devices in the NMS model up-to-date with the SCADA system. NMS supports two synchronization methods for device statuses, digital and analog measurements. At the beginning of the synchronization sequence, NMS will make GetMethods call to determine the list of operations supported by the SCADA system. Synchronization method selection is based on configured preferred method and available SCADA operations.
The synchronization sequence is executed automatically after the connection to a SCADA system is established. It also can be triggered manually using following command
Action -java multispeak.SCADA resync
GetMethods
GetMethods retrieves lists of operations the SCADA system implements. It is used to determine available modes of syn-chronization. It is also used to determine if control requests can be send to SCADA.
GetMethods Request and Response Example
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<ns4:MultiSpeakMsgHeader
xmlns:ns4="http://www.multispeak.org/
Version_4.1_Release"
xmlns:ns3="http://www.w3.org/1999/xlink"
xmlns:ns2="gml" xmlns="cpsm" />
</S:Header>
<S:Body>
<ns4:GetMethods xmlns:ns4="http://www.multispeak.org/
Version_4.1_Release"
xmlns:ns3="http://www.w3.org/1999/xlink"
xmlns:ns2="gml"
xmlns="cpsm" />
</S:Body>
</S:Envelope>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/
envelope/"
xmlns:ver="http://www.multispeak.org/Version_4.1_Release">
<soapenv:Header>
<ver:MultiSpeakMsgHeader/>
</soapenv:Header>
<soapenv:Body>
<ver:GetMethodsResponse>
<ver:GetMethodsResult>
<ver:string>PingURL</ver:string>
<ver:string>GetMethods</ver:string>
<ver:string>InitiateStatusReadByPointID</ver:string>
<ver:string>InitiateAnalogReadByPointID</ver:string>
<ver:string>InitiateControl</ver:string>
<ver:string>GetAllSCADAStatus</ver:string>
<ver:string>GetAllSCADAAnalogs</ver:string>
<ver:string>GetAllSCADATags</ver:string>
</ver:GetMethodsResult>
</ver:GetMethodsResponse>
</soapenv:Body>
</soapenv:Envelope>
 
GetAllSCADAStatus, GetAllSCADAAnalogs
The first synchronization method involves NMS invoking GetAllSCADAStatus and GetAllSCADAAnalogs operations to request the latest device statuses, digital and analog measurements from the SCADA. SCADA provides the requested information synchronously in the response message.
The MultiSpeak specification allows data to be returned in chunks by the SCADA system. In this case, NMS would have to make multiple GetAllSCADAXXX calls. The element lastReceived is included so that large sets of data can be returned in manageable blocks. lastReceived will carry an empty string the first time in a session that this method is invoked. When multiple calls to this method are required to obtain all of the data, the lastReceived should carry the objectID of the last data instance received in subsequent calls. If the ObjectsRemaining field is present in the MultiSpeak reply message's message header, it will be used to determine when all of the data has been received. If the ObjectsRemaining field is not present, the empty result set will signal the end of the data.
GetAllSCADAStatus Request and Response Example
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<ns4:MultiSpeakMsgHeader xmlns:ns4="http://www.multispeak.org/
Version_4.1_Release"
xmlns:ns3="cpsm"
xmlns:ns2="http://www.w3.org/1999/xlink"
xmlns:ns1="gml"
Pwd="test" UserID="nms" />
</S:Header>
<S:Body>
<ns4:GetAllSCADAStatus xmlns:ns4="http://www.multispeak.org/
Version_4.1_Release"
xmlns:ns3="cpsm"
xmlns:ns2="http://www.w3.org/1999/xlink"
xmlns:ns1="gml">
<ns4:lastReceived></ns4:lastReceived>
</ns4:GetAllSCADAStatus>
</S:Body>
</S:Envelope>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ver="http://www.multispeak.org/Version_4.1_Release"
xmlns:cpsm="cpsm">
<soapenv:Header>
<ver:MultiSpeakMsgHeader UserID="scada" Pwd="test"
ObjectsRemaining="0"/>
</soapenv:Header>
<soapenv:Body>
<ver:GetAllSCADAStatusResponse>
<ver:GetAllSCADAStatusResult>
<ver:scadaStatus>
<ver:objectName>BR_R-2241</ver:objectName>
<ver:quality>Initial</ver:quality>
<ver:status>Open</ver:status>
<ver:changeCounter>0</ver:changeCounter>
<ver:timeStamp>2011-03-01T11:11:11</ver:timeStamp>
</ver:scadaStatus>
</ver:GetAllSCADAStatusResult>
</ver:GetAllSCADAStatusResponse>
</soapenv:Body>
</soapenv:Envelope>
GetAllSCADAAnalogs Request and Response Example
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<ns4:MultiSpeakMsgHeader xmlns:ns4="http://www.multispeak.org/
Version_4.1_Release"
xmlns:ns3="cpsm"
xmlns:ns2="http://www.w3.org/1999/xlink"
xmlns:ns1="gml"
Pwd="test" UserID="nms" />
</S:Header>
<S:Body>
<ns4:GetAllSCADAAnalogs xmlns:ns4="http://www.multispeak.org/
Version_4.1_Release"
xmlns:ns3="cpsm"
xmlns:ns2="http://www.w3.org/1999/xlink"
xmlns:ns1="gml">
<ns4:lastReceived></ns4:lastReceived>
</ns4:GetAllSCADAAnalogs>
</S:Body>
</S:Envelope>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ver="http://www.multispeak.org/Version_4.1_Release"
xmlns:cpsm="cpsm">
<soapenv:Header>
<ver:MultiSpeakMsgHeader UserID="scada" Pwd="test"
ObjectsRemaining="0" />
</soapenv:Header>
<soapenv:Body>
<ver:GetAllSCADAAnalogsResponse>
<ver:GetAllSCADAAnalogsResult>
<ver:scadaAnalog>
<ver:objectName>BR_R-2241</ver:objectName>
<ver:value units="Amps">260.78</ver:value>
<ver:quality>Measured</ver:quality>
<ver:timeStamp>2010-06-27T14:41:15-05:00</ver:timeStamp>
<ver:measurementTypeID>Amps</ver:measurementTypeID>
</ver:scadaAnalog>
<ver:scadaAnalog>
<ver:objectName>BR_R-2241</ver:objectName>
<ver:value>0</ver:value>
<ver:quality>Default</ver:quality>
<ver:timeStamp>2010-06-27T14:41:15-05:00</ver:timeStamp>
<ver:measurementTypeID>faultIndicator</ver:measurementTypeID>
</ver:scadaAnalog>
</ver:GetAllSCADAAnalogsResult>
</ver:GetAllSCADAAnalogsResponse>
</soapenv:Body>
</soapenv:Envelope>
GetAllSCADAAnalogs is used for both digital and analog measurements.
InitiateStatusReadByPointID, InitiateAnalogReadByPointID, InitiateTagReadyByPointID
The second synchronization method uses InitiateXXXReadByPointID operations to request latest device statuses, tags, digital and analog measurements from the SCADA. SCADA provides requested information asynchronously by sending XXXChangedNotificationByPointID messages to NMS. To avoid having to send all SCADA points known to NMS an empty list of SCADA points can be used to indicate desire to initiate read for all SCADA points. Operation InitiateTagReadByPointID is not part of MultiSpeak 4.1 specification.
InitiateStatusReadByPointID and InitiateAnalogReadByPointID Request Examples
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<ns4:MultiSpeakMsgHeader
xmlns:ns4="http://www.multispeak.org/Version_4.1_Release"
xmlns:ns3="cpsm"
xmlns:ns2="http://www.w3.org/1999/xlink"
xmlns:ns1="gml"
Pwd="test" UserID="nms" />
</S:Header>
<S:Body>
<ns4:InitiateStatusReadByPointID
xmlns:ns4="http://www.multispeak.org/Version_4.1_Release"
xmlns:ns3="cpsm" xmlns:ns2="http://www.w3.org/1999/xlink"
xmlns:ns1="gml">
<ns4:pointIDs />
<ns4:responseURL>https://nms-server:7002/nms-ms/oa
</ns4:responseURL>
<ns4:transactionID>1300163600187</ns4:transactionID>
<ns4:expTime units="Hours">1.0</ns4:expTime>
</ns4:InitiateStatusReadByPointID>
</S:Body>
</S:Envelope>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<ns4:MultiSpeakMsgHeader xmlns:ns4="http://www.multispeak.org/
Version_4.1_Release"
xmlns:ns3="cpsm" xmlns:ns2="http://www.w3.org/1999/xlink"
xmlns:ns1="gml"
Pwd="test" UserID="nms" />
</S:Header>
<S:Body>
<ns4:InitiateAnalogReadByPointID
xmlns:ns4="http://www.multispeak.org/Version_4.1_Release" xmlns:ns3="cpsm"
xmlns:ns2="http://www.w3.org/1999/xlink" xmlns:ns1="gml">
<ns4:pointIDs />
<ns4:responseURL>https://nms-server:7002/nms-ms/oa</ns4:responseURL>
<ns4:transactionID>1300163600203</ns4:transactionID>
<ns4:expTime units="Hours">1.0</ns4:expTime>
</ns4:InitiateAnalogReadByPointID>
</S:Body>
</S:Envelope>
GetAllSCADATags
Synchronization of tag information is done using GetAllSCADATags operation (not part of MultiSpeak 4.1). The expectation is that SCADA systems would return information about all currently applied tags. NMS compares information received from SCADA against tags currently present in the model and make necessary adjustments (adding or removing tags).
GetAllSCADATags request and Response Example
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<ns4:MultiSpeakMsgHeader xmlns:ns4="http://www.multispeak.org/
Version_4.1_Release"
xmlns:ns3="cpsm"
xmlns:ns2="http://www.w3.org/1999/xlink"
xmlns:ns1="gml"
Pwd="test" UserID="nms" />
</S:Header>
<S:Body>
<ns4:GetAllSCADATags xmlns:ns4="http://www.multispeak.org/
Version_4.1_Release"
xmlns:ns3="cpsm"
xmlns:ns2="http://www.w3.org/1999/xlink"
xmlns:ns1="gml">
<ns4:lastReceived></ns4:lastReceived>
</ns4:GetAllSCADATags>
</S:Body>
</S:Envelope>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/
envelope/"
xmlns:ver="http://www.multispeak.org/Version_4.1_Release"
xmlns:cpsm="cpsm">
<soapenv:Header>
<ver:MultiSpeakMsgHeader UserID="scada" Pwd="test"
ObjectsRemaining="0"/>
</soapenv:Header>
<soapenv:Body>
<ver:GetAllSCADATagsResponse>
<ver:GetAllSCADATagsResult>
<ver:scadaTag objectID="scada-tag-1" verb="Change">
<ver:tagType>Hold</ver:tagType>
<ver:scadaPointID>BR2422</ver:scadaPointID>
<ver:username>scada</ver:username>
<ver:comment>test tag</ver:comment>
<ver:timeStamp>2011-07-19T14:12:31.859-05:00</ver:timeStamp>
</ver:scadaTag>
</ver:GetAllSCADATagsResult>
</ver:GetAllSCADATagsResponse>
</soapenv:Body></soapenv:Envelope>
 
Controls
NMS can use the same operation (InitiateControl) to request device operation and to request placement or removal of a tag. The InitiateControl message consists of a single controlAction object.
The following InitiateControl fields are used:
controlAction/scadaPointID – SCADA point ID;
controlAction/controlKey – SCADA-specific value indicating requested operation (open/close device, place/remove tag);
controlAction/desiredValue – the desired value of the SCADA point being controlled (for example, transformer tap setting);
controlAction/userName - username of the NMS user who initiated the control request
transactionID – unique value associated with the control request;
responseURL – URL of NMS web service, which should be used to report outcome of the requested control action.
Notes:
Field function is required, but NMS does not use it. It is always populated with the value Direct operate.
Field relayType is required, but NMS does not use it. It is always populated with the value Normal.
NMS will not issue separate select and operate commands.
The desiredValue and userName fields are not part of the MultiSpeak 4.1 specification. The SCADA system needs to be aware of this Oracle-specific extension.
The userName field is only populated by the OsiScada plugin.
InitiateControl Request Example
<soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/
xmlns:ver="http://www.multispeak.org/Version_4.1_Release">
<soapenv:Header>
<ver:MultiSpeakMsgHeader UserID="nms" Pwd="test" TimeStamp="2011-03-19T20:04:37"/>
</soapenv:Header>
<soapenv:Body>
<ver:InitiateControl>
<ver:controlAction>
<ver:scadaPointID>BR_R-2241</ver:scadaPointID>
<ver:controlKey>open</ver:controlKey>
<ver:function>Direct operate</ver:function>
<ver:relayType>Normal</ver:relayType>
</ver:controlAction>
<ver:responseURL>https://nms-server:7002/nms-ms/oa</ver:responseURL>
<ver:transactionID>12345</ver:transactionID>
</ver:InitiateControl>
</soapenv:Body>
</soapenv:Envelope>
Operating a SCADA-Controlled Device
1. NMS user instructs open of a SCADA-controlled device.
2. Instructed flag is placed on the device in NMS. The device remains closed in NMS model.
3. NMS sends InitiateControl message to the SCADA system.
4. If requested control action has been successfully executed then:
a. SCADA sends SCADAStatusChangedNotification with the new status of the operated device
b. NMS updates device status in the model and removes Instructed flag
5. Regardless of the outcome of the requested control action
a. SCADA sends ControlActionCompleted message to indicate whether requested control action was successful or not
b. In case of negative outcome NMS removes Instructed flag. Device status remains unchanged.
Note: When SCADA sends ControlActionCompleted message to NMS in case of success NMS will not update device status in its model until SCADAStatusChangedNotification message has been received.
Placing or Removing a Tag on a SCADA-Controlled Device
1. NMS user instructs placement of a HOLD tag on a SCADA-controlled device.
2. Instructed flag is placed on the device in NMS. The device remains closed in the NMS model.
3. NMS sends InitiateControl message to the SCADA system.
4. If requested control action has been successfully executed then:
a. SCADA sends SCADATagChangedNotification with the new status of the operated device.
b. NMS updates device status in the model and removes Instructed flag.
5. If requested control action has NOT been successfully executed then:
a. SCADA sends ControlActionCompleted message to indicate that requested control action has not been executed.
b. NMS removes Instructed flag, device status remains unchanged.
Note: SCADA can send ControlActionCompleted message to NMS in case of success, but NMS will not update tag information in its model until SCADATagChangedNotification message has been received.
Outgoing Device Statuses
If SCADA system has knowledge of the NMS electrical model, then the adapter can be configured to send device status information for devices in the NMS model to the SCADA system.
The SCADA system plugin method buildScadaPointId is used to construct SCADA point id for NMS devices. The version of the buildScadaPointId method accepting the scadaPointId parameter is used here.
SCADAStatusChangedNotification
Sends NMS device status changes to SCADA system.
If support for pending construction devices is enabled then boolean extension item named 'PENDING_CONSTRUCTION' is used to indicate pending construction status of the NMS device.
Example of a message to SCADA system when a device in NMS has been commissioned (this means that the device is no longer pending construction therefore the value of the extension item is false).
<ns4:SCADAStatusChangedNotification xmlns:ns4="http://www.multispeak.org/Version_4.1_Release">
<ns4:scadaStatuses>
<ns4:scadaStatus objectID="148.1345#C">
<ns4:extensionsList>
<ns4:extensionsItem>
<ns4:extName>PENDING_CONSTRUCTION</ns4:extName>
<ns4:extValue>false</ns4:extValue>
<ns4:extType>boolean</ns4:extType>
</ns4:extensionsItem>
</ns4:extensionsList>
<ns4:status>Open</ns4:status>
<ns4:changeCounter>0</ns4:changeCounter>
</ns4:scadaStatus>
</ns4:scadaStatuses>
</ns4:SCADAStatusChangedNotification>
StatusChangedNotificationByPointID
Sends NMS device status information to SCADA system in response to InitiateStatusReadByPointID request. NMS only returns information for devices which are not in the nominal state to reduce volume of data.
Outgoing Tags and Other Conditions
If SCADA system has knowledge of the NMS electrical model, then the adapter can be configured to send information about tags and other conditions (for example, notes) in the NMS model to the SCADA system.
The SCADA system plugin method buildScadaPointId is used to construct SCADA point id associated with NMS tag/condition. The version of the buildScadaPointId method accepting the scadaPointId parameter is used here.
The SCADA system plugin methods setTagHandle, setTagId, setTagType, setUserName, setScadaPointId, setAction, and setTagData are used to populate the outgoing tag update messages.
SCADATagChangedNotification
Sends changes to NMS tags and other conditions to SCADA system.
This operation is vendor extension to the MultiSpeak 4.1 specification.
TagChangedNotificationByPointID
Sends information about NMS tags and other conditions to SCADA system in response to InitiateTagReadByPointID request.
This operation is vendor extension to the MultiSpeak 4.1 specification.
Both SCADATagChangedNotification and TagChangedNotificationByPointID messages contain sequence of ScadaTag objects. The following ScadaTag fields are used by the default SCADA system plugin implementation:
@objectID - NMS condition handle
tagID - NMS condition external id
scadaPointID - SCADA point id
@verb = action (New - condition placed; Change - condition update; Delete - condition removed)
tagType - SCADA tag type
username - NMS operator username
tagReason - condition text
tagInsertionTime - condition creation timestamp
The "safety" extension item in the ScadaTag object can be populated with the safety information associated with the given tag or condition. Safety information is taken from the "safety_info" attribute of the NMS condition. The data type of this extension item is "string". Only the OsiScada plugin populates the "safety" extension item.
Display Integration
HighlightObjectInDisplay
This message causes SCADA system to focus display on a particular SCADA point.
SCADA to NMS
Supported Operations
PingURL
SCADA system can use PingURL operation to verify that NMS is operational.
GetMethods
SCADA system can use GetMethods operation to determine operations supported by NMS.
SCADAAnalogChangedNotification
SCADA system can use this operation to report that analog or digital measurement(s) has changed. The message consists of an array of scadaAnalog objects.
The following scadaAnalog fields should be used (XPath notation is used):
@objectID or objectName - SCADA point ID;
measurementTypeID - measurement type (used to determine NMS attribute);
value - measurement value and units;
quality - quality code associated with the measurement;
timeStamp - measurement timestamp.
Note: If SCADA point ID uniquely identifies the measurement then the measurementTypeID field can be omitted.
Possible Error Conditions
Unknown SCADA system;
Unknown SCADA point id;
Unable to map measurement to NMS attribute;
Empty measurement value.
 
SCADAAnalogChangedNotification Example
Sets Amps attribute to 260.78 and turns off faultIndicator for device BR_R-2241.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ver="http://www.multispeak.org/Version_4.1_Release"
xmlns:cpsm="cpsm">
<soapenv:Header>
<ver:MultiSpeakMsgHeader UserID="nms" Pwd="test"/>
</soapenv:Header>
<soapenv:Body>
<ver:SCADAAnalogChangedNotification>
<ver:scadaAnalogs>
<ver:scadaAnalog>
<ver:objectName>BR_R-2241</ver:objectName>
<ver:value units="Amps">260.78</ver:value>
<ver:quality>Measured</ver:quality>
<ver:timeStamp>2010-06-27T14:41:15-05:00</ver:timeStamp>
<ver:measurementTypeID>Amps</ver:measurementTypeID>
</ver:scadaAnalog>
<ver:scadaAnalog>
<ver:objectName>BR_R-2241</ver:objectName>
<ver:value>0</ver:value>
<ver:quality>Measured</ver:quality>
<ver:timeStamp>2010-06-27T14:41:15-05:00</ver:timeStamp>
<ver:measurementTypeID>faultIndicator</ver:measurementTypeID>
</ver:scadaAnalog>
</ver:scadaAnalogs>
</ver:SCADAAnalogChangedNotification>
</soapenv:Body>
</soapenv:Envelope>
SCADAAnalogChangedNotificationByPointID
The SCADA system can use this operation to report that an analog or digital measurement has changed. The message consists of a single scadaAnalog object.
The following scadaAnalog fields should be used:
@objectID or objectName - SCADA point ID;
measurementTypeID - measurement type (used to determine NMS attribute);
value - measurement value and units;
quality - quality code associated with the measurement;
timeStamp - measurement timestamp.
Possible Error Conditions
Unknown SCADA system;
Unknown SCADA point id;
Unable to map measurement to NMS attribute;
Empty measurement value.
 
AnalogChangedNotificationByPointID
This operation is used by SCADA system to respond to the InitiateAnalogReadByPointID request made by NMS.
The message format is the same as SCADAAnalogChangedNotification with one additional field 'transactionID'.
Its value has to match the value of the 'transactionID' field in the InitiateAnalogReadByPointID message the SCADA system is responding to.
 
SCADAStatusChangedNotification
The SCADA system will use this operation to report that one or more devices have changed status. The message consists of an array of scadaStatus objects.
The following scadaStatus fields should be used:
@objectID or objectName - SCADA point ID;
status - SCADA device status (Open/Closed);
quality - quality code associated with the status update;
changeCounter - number of device status changes since the last report;
timeStamp - device operation timestamp.
Possible Error Conditions
Unknown SCADA system;
Unknown SCADA point id;
Invalid status value.
SCADAStatusChangedNotification Examples
1. Opens device BR_R-2241
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ver="http://www.multispeak.org/Version_4.1_Release"
xmlns:cpsm="cpsm">
<soapenv:Header>
<ver:MultiSpeakMsgHeader UserID="nms" Pwd="test"/>
</soapenv:Header>
<soapenv:Body>
<ver:SCADAStatusChangedNotification>
<ver:scadaStatuses>
<ver:scadaStatus>
<ver:objectName>BR_R-2241</ver:objectName>
<ver:quality>Measured</ver:quality>
<ver:status>Open</ver:status>
<ver:changeCounter>1</ver:changeCounter>
<ver:timeStamp>2011-03-04T11:44:10</ver:timeStamp>
</ver:scadaStatus>
</ver:scadaStatuses>
</ver:SCADAStatusChangedNotification>
</soapenv:Body>
</soapenv:Envelope>
 
2. Closes device BR_R-2241
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ver="http://www.multispeak.org/Version_4.1_Release"
xmlns:cpsm="cpsm">
<soapenv:Header>
<ver:MultiSpeakMsgHeader UserID="nms" Pwd="test"/>
</soapenv:Header>
<soapenv:Body>
<ver:SCADAStatusChangedNotification>
<ver:scadaStatuses>
<ver:scadaStatus>
<ver:objectName>BR_R-2241</ver:objectName>
<ver:quality>Measured</ver:quality>
<ver:status>Closed</ver:status>
<ver:changeCounter>1</ver:changeCounter>
<ver:timeStamp>2011-03-04T11:44:10</ver:timeStamp>
</ver:scadaStatus>
</ver:scadaStatuses>
</ver:SCADAStatusChangedNotification>
</soapenv:Body>
</soapenv:Envelope>
SCADAStatusChangedNotificationByPointID
The SCADA system can use this operation to report that the status of a device has changed. The message consists of a single scadaStatus object.
The following scadaStatus fields should be used:
@objectID or objectName - SCADA point ID;
status - SCADA device status (Open/Closed);
quality - quality code associated with the status update;
changeCounter - number of device status changes since the last report;
timeStamp - device operation timestamp.
Possible Error Conditions
Unknown SCADA system;
Unknown SCADA point id;
Invalid status value.
 
StatusChangedNotificationByPointID
This operation is used by the SCADA system to respond to the InitiateStatusReadByPointID request made by NMS.
Message format is the same as SCADAStatusChangedNotification with one additional field 'transactionID'.
Its value has to match value of the 'transactionID' field in the InitiateStatusReadByPointID message the SCADA system is responding to.
 
SCADATagChangedNotification
The SCADA system can use this operation to report that there has been a change in tag(s) placed on devices in the SCADA system. The message consists of an array of scadaTag objects.
The following scadaTag fields should be used:
@objectID - SCADA tag identifier;
scadaPointID - SCADA point id;
@verb - action (New/Change/Delete);
tagType - SCADA tag type;
username - SCADA operator's user name;
comment - tag comments, notes;
timeStamp - tag operation timestamp.
Possible error conditions:
Unknown SCADA system;
Unknown SCADA point id;
Invalid tag type;
Unsupported action.
This operation is vendor extension to the MultiSpeak 4.1 specification.
 
SCADATagChangedNotification Examples
1. Place HOLD tag on device BR2422
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ver="http://www.multispeak.org/Version_4.1_Release"
xmlns:cpsm="cpsm">
<soapenv:Header>
<ver:MultiSpeakMsgHeader UserID="nms" Pwd="test"/>
</soapenv:Header>
<soapenv:Body>
<ver:SCADATagChangedNotification>
<ver:scadaTags>
<ver:scadaTag objectID="scada-tag-1" verb="New">
<ver:tagType>Hold</ver:tagType>
<ver:scadaPointID>BR2422</ver:scadaPointID>
<ver:username>scada</ver:username>
<ver:comment>test tag</ver:comment>
<ver:timeStamp>2011-07-19T14:12:31.859-05:00</ver:timeStamp>
</ver:scadaTag>
</ver:scadaTags>
</ver:SCADATagChangedNotification>
</soapenv:Body>
</soapenv:Envelope>
2. Update HOLD tag on device BR2422
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ver="http://www.multispeak.org/Version_4.1_Release"
xmlns:cpsm="cpsm">
<soapenv:Header>
<ver:MultiSpeakMsgHeader UserID="nms" Pwd="test"/>
</soapenv:Header>
<soapenv:Body>
<ver:SCADATagChangedNotification>
<ver:scadaTags>
<ver:scadaTag objectID="scada-tag-1" verb="Change">
<ver:tagType>Hold</ver:tagType>
<ver:scadaPointID>BR2422</ver:scadaPointID>
<ver:username>scada2</ver:username>
<ver:comment>updated test tag</ver:comment>
<ver:timeStamp>2011-07-19T14:13:31.859-05:00
</ver:timeStamp>
</ver:scadaTag>
</ver:scadaTags>
</ver:SCADATagChangedNotification>
</soapenv:Body>
</soapenv:Envelope>
3. Remove HOLD tag from device BR2422
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ver="http://www.multispeak.org/Version_4.1_Release"
xmlns:cpsm="cpsm">
<soapenv:Header>
<ver:MultiSpeakMsgHeader UserID="nms" Pwd="test"/>
</soapenv:Header>
<soapenv:Body>
<ver:SCADATagChangedNotification>
<ver:scadaTags>
<ver:scadaTag objectID="scada-tag-1" verb="Delete">
<ver:tagType>Hold</ver:tagType>
<ver:scadaPointID>BR2422</ver:scadaPointID>
<ver:username>scada</ver:username>
<ver:comment>updated test tag</ver:comment>
<ver:timeStamp>2011-07-19T14:14:31.859-05:00
</ver:timeStamp>
</ver:scadaTag>
</ver:scadaTags>
</ver:SCADATagChangedNotification>
</soapenv:Body>
</soapenv:Envelope>
TagChangedNotificationByPointID
This operation is used by the SCADA system to respond to the InitiateTagReadByPointID request made by NMS.
The message format is the same as SCADATagChangedNotification with one additional field 'transactionID'.
Its value has to match value of the 'transactionID' field in the InitiateTagReadByPointID message SCADA system is responding to.
This operation is vendor extension to the MultiSpeak 4.1 specification.
 
ControlActionCompleted
The SCADA system can use this operation to report to NMS the outcome of a control action requested by the InitiateControl operation. The message consists of a single of scadaControl object. In case of successful control action field, the controlStatus should contain value "Control accepted." Any other value is interpreted as control failure.
ControlActionCompleted Example
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ver="http://www.multispeak.org/Version_4.1_Release">
<soapenv:Header>
<ver:MultiSpeakMsgHeader UserID="scada" Pwd="test"/>
</soapenv:Header>
<soapenv:Body>
<ver:ControlActionCompleted>
<ver:controlAction>
<ver:scadaPointID>BR2422</ver:scadaPointID>
<ver:function>Direct operate</ver:function>
<ver:relayType>Normal</ver:relayType>
<ver:controlStatus>Control accepted</ver:controlStatus>
</ver:controlAction>
<ver:transactionID>12345</ver:transactionID>
</ver:ControlActionCompleted>
</soapenv:Body>
</soapenv:Envelope>
VoltageAlarmNotification
The SCADA system can use this operation to report alarms to NMS. The message consists of an array of voltageAlarm objects.
The following voltageAlarm fields should be used:
@objectID - SCADA alarm identifier;
sourceIdentifier - SCADA point id;
sourceIdentifier/@name - attribute name;
@verb - action (only New is allowed);
@errorString - alarm description;
comments - alarm description;
eventTime - SCADA alarm timestamp;
voltageAlarmList/voltageAlarmItem[1]/voltageValue - SCADA measurement value, which caused the alarm;
voltageAlarmList/voltageAlarmItem[1]/quality - SCADA quality code;
voltageAlarmList/voltageAlarmItem[1]/analogCondition - SCADA limit violation;
voltageAlarmList/voltageAlarmItem[1]/phaseCode - SCADA alarm phases.
For alarms SCADA quality code is passed "as-is." Configured quality code mapping rules are not applied in this case.
Possible error conditions:
Unknown SCADA system;
Unknown SCADA point id;
Unsupported action.
 
VoltageAlarmNotification Example
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ver="http://www.multispeak.org/Version_4.1_Release" xmlns:cpsm="cpsm">
<soapenv:Header>
<ver:MultiSpeakMsgHeader UserID="nms1" Pwd="systems"/>
</soapenv:Header>
<soapenv:Body>
<ver:VoltageAlarmNotification>
<ver:alarms>
<ver:voltageAlarm objectID="alarm-1" verb="New"
errorString="alarm test">
<ver:comments>comment</ver:comments>
<ver:sourceIdentifier name="Volts">BR2422
</ver:sourceIdentifier>
<ver:eventTime>2011-05-11T10:05:25.484-05:00
</ver:eventTime>
<ver:voltageAlarmList>
<ver:voltageAlarmItem>
<ver:voltageValue units="V">100</ver:voltageValue>
<ver:quality>Measured</ver:quality>
<ver:analogCondition>H1</ver:analogCondition>
<ver:phaseCode>BC</ver:phaseCode>
</ver:voltageAlarmItem>
</ver:voltageAlarmList>
</ver:voltageAlarm>
</ver:alarms>
</ver:VoltageAlarmNotification>
</soapenv:Body>
</soapenv:Envelope>
InitiateStatusReadByPointID
Initiates process of sending device status information from NMS to SCADA as series of StatusChangedNotificationByPointID messages.
InitiateTagReadByPointID
Initiates process of sending tag/condition information from NMS to SCADA as series of TagChangedNotificationByPointID messages.
The following message fields should be used:
responseURL - web service URL where NMS should send TagChangedNotificationByPointID messages with response data (not used in case of JMS transport)
transactionID - request transaction ID (all TagChangedNotificationByPointID messages sent in response to this request will contain the specified transaction ID)
HighlightObjectInDisplay
Causes NMS viewer to focus on given SCADA point. Viewer window has to be open (this message does not open viewer window).
GetAllSCADAPoints
SCADA system can retrieve list of SCADA points configured in NMS for that particular SCADA system using the GetAllSCADAPoints MultiSpeak operation. The information is returned synchronously.
The MultiSpeak specification allows data to be returned in chunks to the SCADA system. In this case, SCADA would have to make multiple GetAllSCADAPoints calls. The element lastReceived is included so that large sets of data can be returned in manageable blocks. lastReceived must carry an empty string the first time in a sequence of calls. When multiple calls to this method are required to obtain all of the data, the lastReceived should carry the objectID of the last data instance received by previous call. The ObjectsRemaining field in the MultiSpeak header of the reply message is set to 0 in the last response; otherwise, it is set to the number of remaining SCADA points. The LastSent field in the MultiSpeak header of the reply message is set to last SCADA point id sent in this block (it can be used to populate the lastReceived parameter in the next request).
MultiSpeak Message Header
The attributes UserID and Pwd in the MultiSpeak message header are used for authentication unless Basic HTTP Authentication is used. When used for authentication, these attributes should be populated with valid NMS credentials for all messages coming to NMS with exception of PingURL and GetMethods. When Basic HTTP Authentication is used, the attribute Pwd should be either empty or omitted.
The attribute UserID is also used to determine the SCADA system the message originated from. It is checked against the names of the known SCADA systems in the SCADA_IDS database table. If the adapter is configured to communicate with a single SCADA system and the configuration parameter config.strict_scada_name_check is set to false, then SCADA name check is skipped.