Essayez la simulation de contrôle de fréquence avec Python

introduction

J'ai récemment lu un livre intitulé "Introduction à l'ingénierie de contrôle avec Python". J'aimerais essayer le Python-Control qui en sort, donc je vais essayer une simulation de contrôle de fréquence. Bien qu'il soit inclus dans le titre du contrôle, le sujet principal est l'ingénierie électrique.

・ Explication du système d'alimentation et du contrôle de fréquence ・ Essayez d'utiliser Python-Control

Ce sera le contenu.

Quelle est la fréquence

L'électricité 100V que nous utilisons à la maison n'est pas toujours de 100V, mais vibre à intervalles réguliers comme le montre la figure ci-dessous. À ce moment, le changement de temps de la tension $v(t) = 100\sqrt 2 \sin(2\pi f t)  [\rm{V}]$ Est exprimé comme. Ici, $ f \ $ est appelé fréquence et représente le nombre de vibrations par seconde. Et cette fréquence est de 50 Hz dans l'est du Japon et de 60 Hz dans l'ouest du Japon. image.png

Pour ceux qui utilisent l'électricité, la fréquence de l'électricité est souvent considérée comme constante à 50 ou 60 Hz. Cependant, la fréquence réelle change constamment, et si la fréquence change de manière significative, cela peut avoir un effet négatif sur l'équipement électrique. Par conséquent, l'exploitant du système électrique (c'est-à-dire la compagnie d'électricité) doit contrôler la fréquence afin qu'elle ne fluctue pas de manière significative.

Relation entre l'équilibre et la fréquence de l'offre et de la demande

Demande et offre du système électrique

Avant d'expliquer pourquoi la fréquence fluctue, expliquons d'abord brièvement le système d'alimentation. Le système d'alimentation se compose d'une centrale électrique qui fournit de l'énergie, des consommateurs qui consomment de l'énergie et d'un réseau de transmission et de distribution d'énergie qui les relie. Une propriété importante du système d'alimentation est le principe de "quantité égale simultanée" (car il est difficile de stocker l'électricité) que la puissance fournie $ P_G $ et la puissance consommée $ P_L $ doivent toujours correspondre. Cependant, le côté qui utilise l'électricité (les clients) veut utiliser autant d'électricité qu'ils le souhaitent, quand ils le souhaitent, de sorte que la centrale doit toujours adapter la puissance produite à la consommation d'énergie afin d'atteindre la même quantité en même temps.

image.png

Alors, comment la centrale ajuste-t-elle la puissance générée à la consommation électrique? Il n'est pas possible de saisir la consommation électrique de tous les consommateurs en temps réel. Par conséquent, le ** contrôle de fréquence ** devient important.

Équation de balancement du générateur

Les types de centrales électriques sont l'énergie thermique, l'énergie hydraulique et la production d'énergie nucléaire. Récemment, la production d'énergie solaire et la production d'énergie éolienne augmentent, mais je n'y penserai pas cette fois. Ces méthodes de production d'énergie ne diffèrent que par la manière d'obtenir l'énergie de rotation (énergie mécanique), mais toutes les pièces qui passent de l'énergie mécanique à l'énergie électrique sont les mêmes et un "générateur synchrone" est utilisé. image.png Comme le montre la figure, en installant un générateur coaxialement à la turbine à vapeur, la puissance mécanique de la turbine est convertie en énergie électrique. A ce moment, la relation suivante est vraie entre la vitesse de rotation du rotor $ \ omega_m \ [\ rm {rad / s}] $ et la fréquence de la tension induite par le générateur $ f \ [\ rm {Hz}] . Je vais. $\omega_m=2\pi f/p$$ Ici, $ p $ est appelé une paire de pôles et a une valeur fixe en fonction du générateur ($ p = 1 $ est souvent utilisé pour l'énergie thermique). Par conséquent, la fréquence électrique et la vitesse de rotation du générateur / turbine sont les mêmes. Puisque la fréquence est la même valeur pour l'ensemble du système d'alimentation, tous les générateurs connectés au système tournent à la même vitesse. En d'autres termes, contrôler le nombre de tours d'un générateur revient au même que contrôler la fréquence de l'ensemble du système électrique. La variation de la vitesse de rotation (= fréquence) du générateur est exprimée par l '** équation de balancement ** suivante. $M\frac{df}{dt}=P_m-P_g$ Ici, $ M $ est appelé la constante d'inertie et est un paramètre comme le moment d'inertie du corps en rotation. De plus, la valeur de la sortie mécanique $ P_m $ est une valeur contrôlable déterminée par le débit de vapeur, etc., mais la puissance électrique $ P_g $ est déterminée par la demande de puissance $ P_L $ du système d'alimentation ($ P_g si la perte du système est ignorée). = P_L $). À partir de cette équation d'agitation, on peut dire ce qui suit.

-Lorsque $ P_m> P_g $, la fréquence augmente (offre excédentaire) -Lorsque $ P_m = P_g $, la fréquence est constante (l'offre et la demande sont équilibrées) -Lorsque $ P_m <P_g $, la fréquence chute (alimentation insuffisante)

En d'autres termes, il est nécessaire de mesurer la fréquence du système d'alimentation, de diminuer la sortie du générateur lorsque la fréquence augmente, et d'augmenter la sortie du générateur lorsque la fréquence diminue. Le contrôle de fréquence est un contrôle de rétroaction qui utilise la relation entre l'équilibre et la fréquence de l'offre et de la demande.

Vue d'ensemble du contrôle de fréquence

Diagramme

Cette fois, considérons le cas où les générateurs de l'ensemble du système électrique sont intégrés dans une seule unité. Le schéma de principe du contrôle de fréquence est le suivant. La différence entre la sortie du générateur et la charge affecte la fluctuation de fréquence. Les caractéristiques de fréquence du système sur la figure prennent en considération les caractéristiques de fréquence de la charge en plus de l'inertie du générateur. Il existe deux principaux types de boucles de rétroaction, les boucles de contrôle locales et les boucles de contrôle globales.

image.png

Contrôle local

Dans la boucle de commande locale, le régulateur du générateur mesure la fréquence et ajuste la quantité de vapeur qui s'écoule dans la turbine en fonction de l'écart de fréquence. Cela permet de maintenir un équilibre entre l'offre et la demande même lorsque la charge fluctue. Cependant, même si l'équilibre offre-demande peut être maintenu avec seulement un contrôle local, la fréquence convergera vers une valeur déviée de 50 $ \ rm {Hz} $ en raison d'un écart constant.

Contrôle global

Le contrôle global est contrôlé à partir du centre de commande central de l'alimentation électrique, qui gère la centrale électrique. La déviation de fréquence se produira uniquement avec le contrôle local, mais ici nous utiliserons le contrôle intégral pour commander à chaque générateur de renvoyer la fréquence à 50 $ \ rm {Hz} $ (cette fois un générateur) ).

De plus, bien qu'une simple commande intégrale soit utilisée cette fois, la sortie est déterminée en considérant de manière exhaustive les caractéristiques de vitesse et le coût du carburant de chaque générateur dans le système réel.

Essayez d'utiliser Python-Control

J'ai fait référence à cet article pour savoir comment utiliser Python-Control. Utilisez PythonControl pour trouver la réponse à l'onde sinusoïdale.

Calculer la fonction de transfert

Maintenant, je voudrais simuler la fluctuation de fréquence par rapport à la fluctuation de charge en Python. L'exemple de code est assemblé à la fin. Tout d'abord, comme le montre la figure ci-dessous, le bloc de contrôle est simplifié et représenté par une seule fonction de transfert. L'utilisation de Python-Control facilite la gestion des fonctions de transfert. image.png

Réglage de la condition

Le temps de simulation est de 100 secondes et le pas est de 0,01 seconde. On suppose que la fluctuation de la charge augmentera de 10% 10 secondes après le début de la simulation. image.png

simulation

Affiche le changement de temps de l'écart de fréquence lorsque la fluctuation de charge est appliquée. Le premier est pour le contrôle local uniquement ($ K_I = 0 $). Vous pouvez voir qu'il y a un écart constant. image.png

Vient ensuite le cas de l'ajout d'un contrôle global. Il est revenu à 50Hz correctement. image.png

De cette manière, le système d'alimentation surveille en permanence la fréquence et continue d'ajuster la sortie de la centrale électrique afin qu'elle puisse maintenir 50 Hz ou 60 Hz. Cependant, il est difficile de contrôler la production des sources d'énergie renouvelables (énergie éolienne et solaire), qui ont augmenté ces dernières années, et c'est un facteur qui réduit la capacité de contrôle de fréquence. Il semble que les compagnies d'électricité ont également du mal à faire face au nombre toujours croissant de sources d'énergie renouvelables.

à la fin

En fait, je voulais faire une simulation de reproduction du Hokkaido Blackout en septembre 2018, mais c'était compliqué et je n'ai pas bien compris. Donc, cette fois, j'ai essayé le plus simple avec contrôle de fréquence. Je veux augmenter ce que je peux faire petit à petit.

Si vous êtes intéressé, veuillez lire ce matériel. La fluctuation de fréquence juste avant la panne est répertoriée. Quel genre de phénomène est blackout --Electrical Society

Exemple de code

import numpy as np
from control.matlab import *
import matplotlib.pyplot as plt


def main():
    #réglages des paramètres
    M = 10  #Constante inertielle
    D = 2  #Amortissement
    K_gov = 20  #Gain de contrôle proportionnel
    K_I = 2  #Gain de contrôle intégré

    #Paramètres de la fonction de transmission
    System_frequency = tf(1, [M, D])  #Caractéristiques de fréquence du système
    Governor = tf(K_gov, 1)  #Bloc de contrôle gouvernemental
    LFC = tf(K_I, [1, 0])  #Bloc de contrôle LFC
    G = - feedback(System_frequency, Governor + LFC)  #Fonction de transfert à l'échelle du système

    #Paramètres de simulation
    T = np.arange(0, 100, 0.01)  # 0~100 secondes
    dPL = np.array([0 if t < 10 else 0.1 for t in T])  #Réglage de la fluctuation de la charge(Variation de pas)

    #Calcul
    df, T, _ = lsim(G, dPL, T)

    #terrain
    plt.figure(figsize=(9, 4))
    plt.plot(T, dPL)  #Fluctuation de charge
    plt.grid()
    plt.xlim(0, 100)

    plt.figure(figsize=(9, 4))
    plt.plot(T, (df+1)*50)  #Écart de fréquence
    plt.grid()
    plt.xlim(0, 100)


if __name__ == '__main__':
    main()
    plt.show()

Recommended Posts

Essayez la simulation de contrôle de fréquence avec Python
Essayez de gratter avec Python.
Essayez la sortie Python avec Haxe 3.2
Première simulation de cellule nerveuse avec NEURON + Python
Essayez la reconnaissance faciale avec Python
Essayez de gratter avec Python + Beautiful Soup
Essayez d'exploiter Facebook avec Python
Essayez la décomposition de valeurs singulières avec Python
Essayez Python
Essayez la reconnaissance faciale avec python + OpenCV
Essayez de reproduire un film couleur avec Python
Essayez de vous connecter à qiita avec Python
Contrôle exclusif avec fichier de verrouillage en Python
Essayez une formule utilisant Σ avec python
Essayez de travailler avec des données binaires en Python
Essayez d'utiliser Python avec Google Cloud Functions
[Python / PyRoom Acoustics] Simulation acoustique de pièce avec Python
Créer un compteur de fréquence de mots avec Python 3.4
Essayez le scraping HTML avec la bibliothèque Python
Essayez d'appeler Python depuis Ruby avec une économie
Essayez de dessiner une carte avec python + cartopy 0.18.0
[ev3dev × Python] Contrôle SSH (opération à distance avec clavier)
[Suite] Essayez l'accès au registre PLC avec Python
Essayez d'attribuer ou de changer avec Python: lambda
[Pour les débutants] Essayez le web scraping avec Python
Statistiques avec python
Python avec Go
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
Python> essayez: / sauf:
AES256 avec python
Testé avec Python
python commence par ()
simulation ambisonique Python
avec syntaxe (Python)
Installer le contrôle Python
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
nginxparser: essayez d'analyser le fichier de configuration nginx avec Python
Essayez-le avec JupyterLab en Python japonais Word Cloud.
Essayez d'exécuter Google Chrome avec Python et Selenium
Essayez de résoudre le diagramme homme-machine avec Python
Précautions lors du traitement des structures de contrôle dans Python 2.6
Essayez de créer un code de "décryptage" en Python
Essayez de générer automatiquement des documents Python avec Sphinx
Essayez de travailler avec Mongo en Python sur Mac
[Python3] [Ubuntu16] [Docker] Essayez la reconnaissance faciale avec OpenFace
Contrôlons les moteurs et capteurs EV3 avec Python
Essayez de créer un groupe de dièdre avec Python
Essayez de détecter les poissons avec python + OpenCV2.4 (inachevé)
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Python avec eclipse + PyDev.
[Python] Essayez d'optimiser les paramètres de la systole FX avec une recherche aléatoire
Grattage en Python (préparation)
Apprendre Python avec ChemTHEATER 03