Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RSR-396 : Activate used LDevice and Deactivate unused LDevice according to Function/LNode in /Substation - Part 4 of 4 #68

Closed
jeanetiennelemaire opened this issue Mar 8, 2022 · 0 comments · Fixed by #163

Comments

@jeanetiennelemaire
Copy link

jeanetiennelemaire commented Mar 8, 2022

As a COMPAS service user, this US purpose is to:

  • activate /IED/LDevice which is referenced into at least one /Substation/VoltageLevel/Function/LNode by setting the DAI.Val /IED.name/LDevice.inst/LN0 @lnClass="LLN0"/DO@name="Mod"/DAI @stVal/Val to 'on'
  • deactivate /IED/LDevice which is NOT referenced into at least one /Substation/VoltageLevel/Function/LNode by setting the DAI.Val /IED.name/LDevice.inst/LN0  @lnClass="LLN0"/DO @name="Mod"/DAI @stVal/Val to 'off'

  

Prerequisites: 

  • The following COMPAS services have already been developed: RSR-121 Check and update the value of a DAI for a given IED in current SCD file #25 RSR-358 : Automated SCD file creation with Substation import - Part 1 of 4 #65 RSR-367 : Automated ICD import and then IED renaming and Communication section creation into SCD file - Part 2 of 4 #66 RSR-368 : Automated LNode.iedName update into SCD file - Part 3 of 4 #67

     

    The inputs of this service are:

    • A SCD file (required) defined by Header.id, Header.version and Header.revision.
      • This SCD file is associated with an ExportSite from EBM.

     

    US process description:

    •  Step 1)
      • List all /Substation/VoltageLevel/Bay/Function/LNode @iedName @ldInst and @lnClass = LLN0 from SCD file. The list is filtered on LNode @lnClass=LLN0.
    • Step 2)
      • For each /IED @name/LDevice @inst present into current SCD:
        • Find if an occurence is found into one   /Substation/VoltageLevel/Bay/Function/LNode, this indicating that the IED is used:
          • For each /IED @name/LDevice @inst found into the SCD file, search into the list previously done if an occurrence of IED.name and LDevice.inst is found WHERE:
            •  /Substation/VoltageLevel/Bay/Function/LNode @iedName = /IED@name
            • AND Substation/VoltageLevel/Bay/Function/LNode @ldInst = /IED/LDevice@inst
        • Find the ability of the LDevice status to be updated by finding the Enum associated to LLN0.Beh like this:
          • Find the lnType of the LDevice.inst   /SCL/IED/AccessPoint[@name="PROCESS_AP"]/Server/LDevice[@inst="xxxx"]/LN0[@lnClass="LLN0"]@lntype
          • Then, in the DataTypeTemplate, find the LNodeType corresponding to the lnType found previously
          • Into the LNodeType, find the DO@Type of the DO@name="Beh" ("Beh" for "Behaviour")
          • Then find the DOType@id corresponding to DO@Type found previously  and find the DA@type of the DA corresponding to DA@fc="ST" AND DA@name="stVal" 
          • Then find the Enum whose the EnumType@id matches with the DA@type previously found
            • This Enum may contain:
              • one EnumVal="on" AND one EnumVal="off"
              • only one EnumVal="on"
              • only one EnumVal="off"
        • Find the private /IED @name/LDevice @inst/Private/compas:LDevice @LDeviceStatus where the status may be ACTIVE OR INACTIVE OR UNTESTED
    • Step 3)
      • Conclude if an LDevice have to be updated and can be updated to 'on' OR 'off':
        • BehaviourKind Enum\Private compas:LDevice ACTIVE INACTIVE UNTESTED
          contains not 'off' AND contains 'on' If IED/LDevice is present into /Substation then LDevice shall be set to 'on' If IED/LDevice is NOT present into /Substation then an error message is returned An error message is returned If IED/LDevice is present into /Substation then LDevice shall be set to 'on' If IED/LDevice is NOT present into /Substation then an error message is returned
          contains not 'on' AND contains 'off' If IED/LDevice is present into /Substation, then an Error message is returned and the processing is aborted If IED/LDevice is NOT present into /Substation then the LDevice shall be set to 'off' If IED/LDevice is present into /Substation, then an Error message is returned and the processing is aborted If IED/LDevice is NOT present into /Substation then the LDevice shall be set to 'off' If IED/LDevice is present into /Substation then an error message is returned and the processing is aborted If IED/LDevice is NOT present into /Substation then the LDevice shall be set to 'off'
          contains 'on' AND 'off' If IED/LDevice is present into /Substation, then the LDevice shall be set to 'on' If IED/LDevice is NOT present into /Substation, then the LDevice shall be set to 'off' If IED/LDevice is NOT present into /Substation, then the LDevice shall be set to 'off' If IED/LDevice is present into /Substation, then Error message is returned and the processing is aborted If IED/LDevice is present into /Substation, then the LDevice shall be set to 'on' If IED/LDevice is NOT present into /Substation, then the LDevice shall be set to 'off'

     

    Output:

    The SCD file has been updated the following way:

    • All IED/LDevices are properly set to 'on' OR 'off' according to:
      • their presence into /Substation
      • their BehaviourKind Enum content
      • their Private /IED @name/LDevice @inst/Private/compas:LDevice @LDeviceStatus content

     

    Error messages:

    • All error messages from COMPAS services are returned
    • If a SCD file is not provided as input then an error message is returned: "A SCD file is mandatory as input of this service"
    • If one DO @name="Mod"/DAI @stval has its initial value different from the expected value but the COMPAS service can't do this because this DAI Val is not updatable then the processing is aborted and an error message is returned: "The DAI @stval cannot be edited for IED.name and LDevice.inst. End of processing."
    • If there is one IED/LDevice with:
      • a BehaviourKind Enum which contains 'on' AND 'off'
      • a Private compas:LDevice @LDeviceStatus = 'INACTIVE'
      • at least one occurrence into Substation/VoltageLevel/Bay/Function/LNode
      • then as a such case should not occur, the processing is aborted and an error message is returned: "The IED@name/LDevice@inst is not qualified into STD but has been selected into SSD: this case should not occur. End of the processing."
    • If for a given IED/LDevice, a DO @name="Beh" OR its associated DA@fc="ST" AND DA@name="stVal" are missing then the processing is aborted and an error message is returned: "The IED@name/LDevice@inst doesn't have a DO @name="Beh" OR its associated DA@fc="ST" AND DA@name="stVal". End of the processing."
    • If for a given IED/LDevice the Private /IED @name/LDevice @inst/Private/compas:LDevice @LDeviceStatus is missing then the processing is aborted and an error message is returned: "The IED@name/LDevice@inst doesn't have a Private compas:LDevice. End of the processing."
    • If there is one IED/LDevice with:
      • a BehaviourKind Enum which not contains 'on' 
      • at least one occurrence into Substation/VoltageLevel/Bay/Function/LNode
      • then as a such case should not occur, the processing is aborted and an error message is returned: "The IED@name/LDevice@inst cannot be set to 'on' but has been selected into SSD: this case should not occur. End of the processing."
    • If there is one IED/LDevice with:
      • a BehaviourKind Enum which not contains 'off' 
      • no occurrence into Substation/VoltageLevel/Bay/Function/LNode
      • then as a such case should not occur, the processing is aborted and an error message is returned: "The IED@name/LDevice@inst cannot be set to 'off' but has not been selected into SSD: this case should not occur. End of the processing."
    • If there is one IED/LDevice with:
      • a BehaviourKind Enum which not contains 'off' 
      • at least one occurrence into Substation/VoltageLevel/Bay/Function/LNode
      • its Private compas:LDevice@LDeviceStatus = INACTIVE
      • then as a such case should not occur, the processing is aborted and an error message is returned: "The IED@name/LDevice@inst has to be set to 'on' but has its Private compas:LDevice sets to INACTIVE: this case should not occur. End of the processing."

     

    Acceptance criteria:

    • Check that all SCL/IED.name/LDevice.inst which have their BehaviourKind Enum containing not 'off' are set to 'on'
    • Check that all SCL/IED.name/LDevice.inst which have their BehaviourKind Enum containing not 'on' are set to 'off'
    • Check that for all SCL/IED.name/LDevice.inst which have their BehaviourKind Enum containing 'on' AND 'off' AND :
      • If the SCL/IED.name/LDevice is referenced into /Substation/VoltageLevel/Function/LNode @iedName @ldInst AND /IED @name/LDevice @inst/Private/compas:LDevice @LDeviceStatus = 'ACTIVE' then these LDevice are set to 'on'
      • If the SCL/IED.name/LDevice is NOT referenced into /Substation/VoltageLevel/Function/LNode @iedName @ldInst AND /IED @name/LDevice @inst/Private/compas:LDevice @LDeviceStatus = 'ACTIVE' then these LDevice are set to 'off'
      • If the SCL/IED.name/LDevice is referenced into /Substation/VoltageLevel/Function/LNode @iedName @ldInst AND /IED @name/LDevice @inst/Private/compas:LDevice @LDeviceStatus = 'INACTIVE' then the processing is aborted and an error message is returned
      • If the SCL/IED.name/LDevice is NOT referenced into /Substation/VoltageLevel/Function/LNode @iedName @ldInst AND /IED @name/LDevice @inst/Private/compas:LDevice @LDeviceStatus = 'INACTIVE' then these LDevice are set to 'off'
      • If the SCL/IED.name/LDevice is referenced into /Substation/VoltageLevel/Function/LNode @iedName @ldInst AND /IED @name/LDevice @inst/Private/compas:LDevice @LDeviceStatus = 'UNTESTED' then the LDevice shall be set to 'on'
      • If the SCL/IED.name/LDevice is NOT referenced into /Substation/VoltageLevel/Function/LNode @iedName @ldInst AND /IED @name/LDevice @inst/Private/compas:LDevice @LDeviceStatus = 'UNTESTED' then these LDevice are set to 'off'
    • Check that if a IED.name/LDevice.inst/LN0 @Prefix @lnClass="LLN0" @inst/DO @name="Mod"/DAI @stVal/Val can't be updated then the processing is aborted and an error message is returned
    • Check that if a SCD file is not provided as input then the processing is aborted and an error message is returned
    • Check that if there is one IED/LDevice with:
      • a BehaviourKind Enum which contains 'on' AND 'off'
      • a Private compas:LDevice @LDeviceStatus = 'INACTIVE'
      • at least one occurrence into Substation/VoltageLevel/Bay/Function/LNode
      • then the processing is aborted and an error message is returned
    • If a COMPAS service called from this main service returns an error, check that this error message is well returned into the main service
    • Check that if for a given IED/LDevice, a DO @name="Beh" OR its associated DA@fc="ST" AND DA@name="stVal" are missing then the processing is aborted and an error message is returned
    • Check that if for a given IED/LDevice the Private /IED @name/LDevice @inst/Private/compas:LDevice @LDeviceStatus is missing then the processing is aborted and an error message is returned
    • Check that if there is one IED/LDevice with:
      • a BehaviourKind Enum which not contains 'on' 
      • at least one occurrence into Substation/VoltageLevel/Bay/Function/LNode
      • then the processing is aborted and an error message is returned
    • Check that if there is one IED/LDevice with:
      • a BehaviourKind Enum which not contains 'off' 
      • no occurrence into Substation/VoltageLevel/Bay/Function/LNode
      • then as a such case should not occur, the processing is aborted and an error message is returned
    • Check that if there is one IED/LDevice with:
      • a BehaviourKind Enum which not contains 'off' 
      • at least one occurrence into Substation/VoltageLevel/Bay/Function/LNode
      • its Private compas:LDevice@LDeviceStatus = INACTIVE
      • then as a such case should not occur, the processing is aborted and an error message is returned

     

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants