Device Modeling Team�Final Presentation
Problem Statement:
The security of electrical grid
Device Team: Explore Physics-Informed Neural Networks (PINNs) and Holomorphic Embedding Load Flow (HELF)
Network Team: Integration of DNP3 communication Protocol
Monitoring Team: Introduce new HELICS python federate
Introduction
Problem and Project Goals
Background/Problem
Simulate a secure smart grid with a focus on the devices, communications, and monitoring within an individual substation.
Final Goals
Develop new functional models for 5 substation level devices
Complete DNP3 network integration
Create monitoring and fault tolerant behavior across modeled devices and communications
Project Roadmap
Device Modeling Subteam
Members: Vidur, Zaeem, Nicholas
Goal:
Integration with Protocols:
Modeling New Devices:
Integration with ROS Subteam:
Exploratory Machine Learning (ML) Work:
Simulating Fault Tolerance and Recovery:
Device Modeling Subteam Tasks
Task 1 - GLM Object Implementation
Task 2 - DNP3 server commands
Task 3: Fault Tolerance and Recovery
Task 4: Powerflow-ML
Device Modeling Subteam- Powerflow ML
HELF Implementation
Network Protocol Integration Subteam Tasks
Task 1 - DNP3 Working Example
Task 2 - Integration between DNP3 and device models
Task 3 - Synthesis between device models and HELICS co-simulation
Task 4 - Identify the devices in the substation to be modeled
Time permitting: Network Security (explore vulnerabilities and different scenarios), implementing other protocols (IEC 61850 & Modbus),
Helics Integration
Physics Modeling – GridLAB-D
Custom Device Models�+ ROS
Power Flow Equations - PyPower
Simulation Coordination - HELICS
Substation simulation occurs here
Using the simple_gridlabd_example as a base
Substation Simulation
for t in range(0, total_inteval, pf_interval):
while grantedtime < t:
grantedtime = h.helicsFederateRequestTime(fed, t)
### Subscribing to Feeder Load from to GridLAB-D ###
for i in range(0, subkeys_count):
sub = subid["m{}".format(i)]
demand = h.helicsInputGetComplex(sub)
rload = demand.real
iload = demand.imag
if (not cb.is_closed_status()):
rload = 0
iload = 0
######### Publishing Voltage to GridLAB-D ##########
for i in range(0, pubkeys_count):
pub = pubid["m{}".format(i)]
status = h.helicsPublicationPublishComplex(pub, rload, iload)
cb = CircuitBreaker(name="CB1", protocol="Protocol1", max_current=200.0)
########## Registering federate from json ######
fed = h.helicsCreateValueFederateFromConfig("circuit_breakers_config.json")
h.helicsFederateRegisterInterfaces(fed, "circuit_breakers_config.json")
federate_name = h.helicsFederateGetName(fed)
logger.info("HELICS Version: {}".format(h.helicsGetVersion()))
logger.info("{}: Federate {} has been registered".format(federate_name, federate_name))
pubkeys_count = h.helicsFederateGetPublicationCount(fed)
subkeys_count = h.helicsFederateGetInputCount(fed)
######## Reference to Publications and Subscription form index ####
pubid = {}
subid = {}
for i in range(0, pubkeys_count):
pubid["m{}".format(i)] = h.helicsFederateGetPublicationByIndex(fed, i)
pubtype = h.helicsPublicationGetType(pubid["m{}".format(i)])
pubname = h.helicsPublicationGetName(pubid["m{}".format(i)])
logger.info("{}: Registered Publication ---> {}".format(federate_name, pubname))
for i in range(0, subkeys_count):
subid["m{}".format(i)] = h.helicsFederateGetInputByIndex(fed, i)
h.helicsInputSetDefaultComplex(subid["m{}".format(i)], 0, 0)
sub_key = h.helicsSubscriptionGetTarget(subid["m{}".format(i)])
logger.info("{}: Registered Subscription ---> {}".format(federate_name, sub_key))
Inter-device Communication
Future Considerations
Transformer
What is a Transformer?
Components of a Transformer
How it works
Tap Changers
Tap Changers
Switchgear
Switchgear
Network Protocol Integration Subteam
Substation Network Architecture
Technical Details - DNP3 Integration
DNP3 Integration Progress
Demo
Evidence of Networking
From the Master station log
From Wireshark pcap
Next Steps with Networking
Monitoring Subteam
Members: Dhruv, Albert, Ethan, Reva
Goals:
1. Log co-simulation environment changes: Continuously monitor and record the evolving state of the co-simulation environment to ensure system stability and any changes that will impact overall performance.
2. Python scripts for incident resolution: Develop Python HELICS frameworks to support monitoring efforts by analyzing and resolving unexpected incidents and fault and creating physical parameter comparisons.
3. Alerts for anomaly detection: Develop an automated alert system to detect and notify members of and potential anomalies or irregularities in the environment to maintain system reliability by resolving issues before they escalate.
Monitoring Subteam Tasks
Task 1
Task 2
Monitoring Subteam Tasks Cont.
Task 3 - Co-simulation Scenario Design:
Task 4 - Implement Real Time Data Monitoring
Task 5 - Implement more problems/faults to the system
Conclusion
Problem
Simulate a secure smart grid with a focus on the devices, communications, and monitoring within an individual substation.
Device Modeling Tasks
Network Integration Tasks
Monitoring Tasks
References
Research/Images
Tutorials
Introductory Information:
Questions?