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):
Note: If SCADA point ID uniquely identifies the measurement then the measurementTypeID field can be omitted.
Possible error conditions:
SCADAAnalogChangedNotification 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="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:
Possible error conditions:
AnalogChangedNotificationByPointID
This operation is used by SCADA system to respond to the InitiateAnalogReadByPointID request made by NMS.
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:
Possible error conditions:
SCADAStatusChangedNotification examples
<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>
<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:
Possible error conditions:
StatusChangedNotificationByPointID
This operation is used by the SCADA system to respond to the InitiateStatusReadByPointID request made by NMS.
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:
Possible error conditions:
This operation does not exist in MultiSpeak 4.1 specification.
SCADATagChangedNotification examples
<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>
<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>
<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.
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 voltageA-larm objects.
The following voltageAlarm fields should be used:
For alarms SCADA quality code is passed "as-is." Configured quality code mapping rules are not applied in this case.
Possible error conditions:
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 for non-SCADA devices from NMS to SCADA as series of StatusChangedNotificationByPointID messages.
HighlightObjectInDisplay
Causes NMS viewer to focus on given SCADA point. Viewer window has to be open (this message does not open viewer window).
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.