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.
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<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" />
<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" />
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 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/">
<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" />
<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" />
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ver="http://www.multispeak.org/Version_4.1_Release">
<ver:MultiSpeakMsgHeader/>
<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:GetMethodsResponse>
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/">
<ns4:MultiSpeakMsgHeader xmlns:ns4="http://www.multispeak.org/ Version_4.1_Release"
xmlns:ns2="http://www.w3.org/1999/xlink"
Pwd="test" UserID="nms" />
<ns4:GetAllSCADAStatus xmlns:ns4="http://www.multispeak.org/ Version_4.1_Release"
xmlns:ns2="http://www.w3.org/1999/xlink"
<ns4:lastReceived></ns4:lastReceived>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ver="http://www.multispeak.org/Version_4.1_Release"
<ver:MultiSpeakMsgHeader UserID="scada" Pwd="test"
<ver:GetAllSCADAStatusResponse>
<ver:GetAllSCADAStatusResult>
<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:GetAllSCADAStatusResult>
</ver:GetAllSCADAStatusResponse>
GetAllSCADAAnalogs Request and Response Example
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<ns4:MultiSpeakMsgHeader xmlns:ns4="http://www.multispeak.org/ Version_4.1_Release"
xmlns:ns2="http://www.w3.org/1999/xlink"
Pwd="test" UserID="nms" />
<ns4:GetAllSCADAAnalogs xmlns:ns4="http://www.multispeak.org/ Version_4.1_Release"
xmlns:ns2="http://www.w3.org/1999/xlink"
<ns4:lastReceived></ns4:lastReceived>
</ns4:GetAllSCADAAnalogs>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ver="http://www.multispeak.org/Version_4.1_Release"
<ver:MultiSpeakMsgHeader UserID="scada" Pwd="test"
<ver:GetAllSCADAAnalogsResponse>
<ver:GetAllSCADAAnalogsResult>
<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:objectName>BR_R-2241</ver:objectName>
<ver:quality>Default</ver:quality>
<ver:timeStamp>2010-06-27T14:41:15-05:00</ver:timeStamp>
<ver:measurementTypeID>faultIndicator</ver:measurementTypeID>
</ver:GetAllSCADAAnalogsResult>
</ver:GetAllSCADAAnalogsResponse>
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/">
<ns4:MultiSpeakMsgHeader xmlns:ns4="http://www.multispeak.org/Version_4.1_Release"
xmlns:ns2="http://www.w3.org/1999/xlink"
Pwd="test" UserID="nms" />
<ns4:InitiateStatusReadByPointID
xmlns:ns4="http://www.multispeak.org/Version_4.1_Release"
xmlns:ns3="cpsm" xmlns:ns2="http://www.w3.org/1999/xlink"
<ns4:responseURL>https://nms-server:7002/nms-amr/oa</ns4:responseURL>
<ns4:transactionID>1300163600187</ns4:transactionID>
<ns4:expTime units="Hours">1.0</ns4:expTime>
</ns4:InitiateStatusReadByPointID>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<ns4:MultiSpeakMsgHeader xmlns:ns4="http://www.multispeak.org/Version_4.1_Release"
xmlns:ns3="cpsm" xmlns:ns2="http://www.w3.org/1999/xlink"
Pwd="test" UserID="nms" />
<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:responseURL>https://nms-server:7002/nms-amr/oa</ns4:responseURL>
<ns4:transactionID>1300163600203</ns4:transactionID>
<ns4:expTime units="Hours">1.0</ns4:expTime>
</ns4:InitiateAnalogReadByPointID>
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/">
<ns4:MultiSpeakMsgHeader xmlns:ns4="http://www.multispeak.org/Version_4.1_Release"
xmlns:ns2="http://www.w3.org/1999/xlink"
Pwd="test" UserID="nms" />
<ns4:GetAllSCADATags xmlns:ns4="http://www.multispeak.org/Version_4.1_Release"
xmlns:ns2="http://www.w3.org/1999/xlink"
<ns4:lastReceived></ns4:lastReceived>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ver="http://www.multispeak.org/Version_4.1_Release"
<ver:MultiSpeakMsgHeader UserID="scada" Pwd="test"
<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:GetAllSCADATagsResult>
</ver:GetAllSCADATagsResponse>
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:
•
|
scadaPointID - SCADA point ID;
|
•
|
controlKey - SCADA-specific value indicating requested operation (open/close device, place/remove tag);
|
•
|
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.
|
•
|
Field function is required, but NMS will not use it. Field function will always contain the following value: Direct operate.
|
•
|
NMS will not issue separate select and operate commands.
|
InitiateControl request example
<soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/
xmlns:ver="http://www.multispeak.org/Version_4.1_Release">
<ver:MultiSpeakMsgHeader UserID="nms" Pwd="test" TimeStamp="2011-03-19T20:04:37"/>
<ver:scadaPointID>BR_R-2241</ver:scadaPointID>
<ver:controlKey>open</ver:controlKey>
<ver:function>Direct operate</ver:function>
<ver:relayType>Normal</ver:relayType>
<ver:responseURL>https://nms-server:7002/nms-amr/oa</ver:responseURL>
<ver:transactionID>12345</ver:transactionID>
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
|
3.
|
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.
|
3.
|
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.
If SCADA system has knowledge of the NMS electrical model, then the adapter can be configured to send device status information for non-SCADA devices in the NMS model to the SCADA system.
The SCADA system plugin method
buildScadaPointId is used to construct SCADA point id for non-SCADA devices.
SCADAStatusChangedNotification
Sends NMS device status changes to SCADA system.
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.
This message causes SCADA system to focus display on a particular SCADA point.