本日3件のお問い合わせがありました。

✉️FIELDにお問い合わせ

システム開発

発電所の主な工程とアラートポイントを自動化するシステムを容易に実現する

発電所の種類によって工程やアラートポイントは異なりますが、一般的な火力発電所原子力発電所の工程を基に、代表的なアラートポイントを列挙します。


火力発電所の主な工程とアラートポイント

  1. 燃料供給・燃焼(石炭、LNG、重油など)
    • 燃料供給圧力異常(燃料供給管の圧力が低下・上昇)
    • 燃料温度異常(燃料の温度が想定範囲を超過)
    • 燃料供給装置の振動異常(異常振動が検出された場合)
    • 燃焼温度異常(燃焼室の温度が異常に高い・低い)
  2. ボイラー(蒸気発生器)
    • ボイラー圧力異常(設定値以上・以下)
    • 水位異常(給水不足・過剰)
    • 過熱温度異常(蒸気温度が異常に上昇)
    • 排ガス温度異常(燃焼不完全で排ガス温度が高くなる)
  3. 蒸気タービン
    • 回転数異常(規定回転数を超過・低下)
    • タービン振動異常(許容範囲を超える振動)
    • 潤滑油圧力異常(オイル供給不足)
    • 軸受温度異常(温度が規定値を超過)
  4. 発電機
    • 発電機出力異常(電力出力の急変)
    • 電圧・周波数異常(規定範囲外の電圧・周波数)
    • 冷却装置の異常(冷却水不足・温度異常)
    • 絶縁抵抗低下(発電機コイルの劣化)
  5. 排ガス処理設備
    • 排ガス温度異常(環境基準を超過)
    • 排ガス中のNOx/SOx濃度異常(環境基準を超過)
    • 集塵装置の詰まり(フィルターの目詰まり)
  6. 冷却水系統
    • 冷却水温度異常(冷却水の温度が高すぎる)
    • ポンプ圧力異常(圧力不足または過剰)
    • 配管内の異物検知(異物の詰まりや腐食)

火力発電所の主な工程とアラートポイントを詳しく整理します。


1. 燃料供給・燃焼

(燃料:石炭、LNG、重油など)
🔥アラートポイント

  • 燃料供給圧力異常(供給管の圧力低下・上昇)
  • 燃料温度異常(燃料の温度が基準値を超過)
  • 燃焼温度異常(燃焼室の温度が異常に高い・低い)
  • 燃焼ガス組成異常(O₂、CO、NOx、SOxの濃度異常)
  • 燃料供給装置の振動異常(異常振動の検出)

2. ボイラー(蒸気発生器)

🌡️アラートポイント

  • ボイラー圧力異常(蒸気圧力が設定値以上・以下)
  • 水位異常(給水不足・過剰 → ボイラー破損の危険)
  • 過熱温度異常(蒸気温度が高すぎる → タービン損傷の危険)
  • 排ガス温度異常(燃焼効率低下、排気温度過上昇)
  • 火炎監視アラート(燃焼が正常でない → 爆発リスク)

3. 蒸気タービン

🌀アラートポイント

  • 回転数異常(規定回転数を超過・低下)
  • タービン振動異常(軸振動が許容範囲を超える → 機械損傷リスク)
  • 潤滑油圧力異常(潤滑油供給不足 → 軸受の焼き付きリスク)
  • 軸受温度異常(温度が規定値を超過 → 焼損の危険)
  • 蒸気湿度異常(湿り蒸気の発生 → タービン翼損傷のリスク)

4. 発電機

アラートポイント

  • 発電機出力異常(電力出力の急変 → 負荷変動)
  • 電圧・周波数異常(規定範囲外の電圧・周波数)
  • 冷却装置の異常(冷却水・水素冷却圧力の異常)
  • 絶縁抵抗低下(コイルの劣化による短絡リスク)

5. 排ガス処理設備

🌫️アラートポイント

  • 排ガス温度異常(環境基準を超過)
  • 排ガス中のNOx/SOx濃度異常(環境基準を超過)
  • 集塵装置の詰まり(フィルターの目詰まり → 圧力損失)

6. 冷却水系統

💧アラートポイント

  • 冷却水温度異常(冷却水温度が高すぎる → 効率低下)
  • ポンプ圧力異常(圧力不足または過剰 → 配管損傷リスク)
  • 冷却塔の異常(通風不足・ファン故障 → 冷却能力低下)
  • 水質異常(スケール形成や腐食の進行)

7. 送電・配電設備

🔌アラートポイント

  • 送電線電流・電圧異常(過電流・過電圧 → 設備損傷リスク)
  • 変圧器温度異常(絶縁油温度の上昇 → 絶縁破壊リスク)
  • 地絡・短絡検知(配電網内でのショート検出)

8. 安全管理・監視

🚨アラートポイント(異常時の緊急停止トリガー)

  • 地震検知(震度○以上で自動停止)
  • 異常振動検知(設備全体で振動が基準値を超過)
  • 火災検知(燃焼系・電気系統の発火検知)
  • サイバー攻撃検知(制御系ネットワーク異常)

まとめ

火力発電所では、温度・圧力・振動・排ガス成分・水質など多くのパラメータを監視し、異常時にはアラートが発生します。特に、ボイラーやタービンの異常は発電能力だけでなく、重大な事故に直結するため、厳格な監視とアラートシステムが求められます。

あなた:

それぞれに監視する装置を 例えば一例でラズベリーパイや その他特別な資格がなくても計測監視できる装置を使い、値を取ったらawsのs3等にあげてBIでグラフ化するやり方を教えてください 装置の提案とクラウドへの送信、そしてBIの表示方法を書いてくださいlaravelを使う想定で

ChatGPT:

火力発電所の異常監視システム

(Raspberry Pi + AWS S3 + Laravel + BIツール)

本システムでは、Raspberry Pi市販のIoTセンサー を利用し、発電所の各異常値(温度、振動、圧力など)を監視します。取得したデータを AWS S3 にアップロードし、Laravelを使って管理し、BIツール(MetabaseやRedash)で可視化します。


1. 監視装置の選定

ラズベリーパイを中心に、対応するセンサーを接続して計測します。以下のようなセンサーが考えられます。

監視対象センサー/デバイス対応機能
温度異常DHT22 / DS18B20ボイラー、タービンの温度監視
振動異常ADXL345 / MPU6050タービン、モーターの振動監視
圧力異常BMP280 / MPS20N0040Dボイラー圧力監視
排ガス成分MQ-135NOx, SOx 濃度監視
水位異常HC-SR04冷却水、給水監視

2. データ取得・AWS S3にアップロード

(1) Raspberry Piでセンサーデータ取得

Raspberry Pi にPythonを使い、センサーデータを取得するスクリプトを作成します。

例:温度センサーデータを取得

import time
import board
import adafruit_dht
import boto3
import json
from datetime import datetime

# DHT22 センサー設定
dht_device = adafruit_dht.DHT22(board.D4)

# AWS S3 設定
s3 = boto3.client('s3',
aws_access_key_id='YOUR_ACCESS_KEY',
aws_secret_access_key='YOUR_SECRET_KEY',
region_name='us-east-1'
)
BUCKET_NAME = "fireplant-monitor"

def get_temperature():
try:
temperature = dht_device.temperature
humidity = dht_device.humidity
return {"temperature": temperature, "humidity": humidity, "timestamp": str(datetime.now())}
except RuntimeError as error:
print(f"Error: {error}")
return None

while True:
data = get_temperature()
if data:
file_name = f"temperature/{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.json"
s3.put_object(Bucket=BUCKET_NAME, Key=file_name, Body=json.dumps(data))
print(f"Uploaded: {file_name}")
time.sleep(60) # 1分ごとにデータ取得

このスクリプトを各センサーに応じて変更し、定期的にS3にデータを送信。


3. LaravelでS3のデータを管理

(1) Laravelでデータ取得・データベースへ保存

Laravelでは、S3にアップロードされたデータを定期的に取得し、データベースに保存します。

① Laravelの設定

composer require league/flysystem-aws-s3-v3

.env にAWSの認証情報を追加:

AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_key
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=fireplant-monitor

② S3のデータを取得してデータベースへ保存

use Illuminate\Support\Facades\Storage;
use App\Models\SensorData;

public function fetchS3Data()
{
$files = Storage::disk('s3')->files('temperature/');

foreach ($files as $file) {
$content = Storage::disk('s3')->get($file);
$data = json_decode($content, true);

SensorData::create([
'type' => 'temperature',
'value' => $data['temperature'],
'timestamp' => $data['timestamp']
]);

// S3内のデータは削除(処理済みとして)
Storage::disk('s3')->delete($file);
}
}

この関数をLaravelのスケジューラで定期実行。


4. BIツールで可視化

LaravelのデータをMetabase または Redash で可視化します。

(1) Metabaseでデータ可視化

  1. Metabaseのセットアップ
    docker run -d -p 3000:3000 --name metabase metabase/metabase
  2. Laravelのデータベースを接続
    • MetabaseのUIで「新しいデータベースを追加」
    • mysql を選択
    • Laravelの DB_HOST, DB_NAME, DB_USER, DB_PASSWORD を入力
  3. データの可視化
    • 「質問を作成」 → 「SQLエディタでデータ取得」
    • 例:
    sqlコピーする編集するSELECT timestamp, value FROM sensor_data WHERE type = 'temperature' ORDER BY timestamp DESC;
    • 折れ線グラフ・ヒートマップで可視化

5. まとめ

ステップ内容
監視装置の選定Raspberry Pi + DHT22等のIoTセンサー
データ取得Raspberry PiのPythonスクリプトで計測
AWS S3へ送信Boto3を使ってS3へJSONデータを保存
Laravelで管理S3のデータを取得し、データベースへ保存
BIで可視化Metabaseでデータを可視化

🔥 このシステムを拡張すれば、火力発電所の異常監視を簡単に自動化できます!

あなた:

監視対象 センサー/デバイス 対応機能 温度異常 DHT22 / DS18B20 ボイラー、タービンの温度監視 振動異常 ADXL345 / MPU6050 タービン、モーターの振動監視 圧力異常 BMP280 / MPS20N0040D ボイラー圧力監視 排ガス成分 MQ-135 NOx, SOx 濃度監視 水位異常 HC-SR04 冷却水、給水監視 それぞれお願いします

ChatGPT:

以下、それぞれのセンサーを使ったデータ取得、AWS S3 への送信、Laravel での管理、および BI ツールでの可視化の方法を説明します。


1. 各センサーのデータ取得 & AWS S3 への送信

① 温度異常監視(DHT22 / DS18B20)

🔥 用途:ボイラー、タービンの温度監視

接続

  • DHT22GPIO
  • DS18B201-Wire(専用データピン)

Raspberry Pi 用 Python スクリプト

import time
import board
import adafruit_dht
import boto3
import json
from datetime import datetime

# センサー設定(DHT22)
dht_device = adafruit_dht.DHT22(board.D4)

# AWS S3 設定
s3 = boto3.client('s3',
aws_access_key_id='YOUR_ACCESS_KEY',
aws_secret_access_key='YOUR_SECRET_KEY',
region_name='us-east-1'
)
BUCKET_NAME = "fireplant-monitor"

def get_temperature():
try:
temperature = dht_device.temperature
humidity = dht_device.humidity
return {"temperature": temperature, "humidity": humidity, "timestamp": str(datetime.now())}
except RuntimeError as error:
print(f"Error: {error}")
return None

while True:
data = get_temperature()
if data:
file_name = f"temperature/{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.json"
s3.put_object(Bucket=BUCKET_NAME, Key=file_name, Body=json.dumps(data))
print(f"Uploaded: {file_name}")
time.sleep(60) # 1分ごとにデータ取得

② 振動異常監視(ADXL345 / MPU6050)

🌀 用途:タービン、モーターの振動監視

接続

  • ADXL345I2C
  • MPU6050I2C

Raspberry Pi 用 Python スクリプト

import smbus
import time
import boto3
import json
from datetime import datetime

# I2C アドレス
DEVICE_ADDRESS = 0x53 # ADXL345のI2Cアドレス

# I2C バス設定
bus = smbus.SMBus(1)

# AWS S3 設定
s3 = boto3.client('s3',
aws_access_key_id='YOUR_ACCESS_KEY',
aws_secret_access_key='YOUR_SECRET_KEY',
region_name='us-east-1'
)
BUCKET_NAME = "fireplant-monitor"

def read_acceleration():
data = bus.read_i2c_block_data(DEVICE_ADDRESS, 0x32, 6)
x = (data[1] << 8) | data[0]
y = (data[3] << 8) | data[2]
z = (data[5] << 8) | data[4]
return {"x": x, "y": y, "z": z, "timestamp": str(datetime.now())}

while True:
accel_data = read_acceleration()
file_name = f"vibration/{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.json"
s3.put_object(Bucket=BUCKET_NAME, Key=file_name, Body=json.dumps(accel_data))
print(f"Uploaded: {file_name}")
time.sleep(5)

③ 圧力異常監視(BMP280 / MPS20N0040D)

用途:ボイラー圧力監視

接続

  • BMP280I2C
  • MPS20N0040Dアナログ入力(ADC 必要)

Raspberry Pi 用 Python スクリプト

import smbus2
import time
import boto3
import json
from datetime import datetime
from bmp280 import BMP280 # BMP280ライブラリ

bmp280 = BMP280(i2c_dev=smbus2.SMBus(1))

# AWS S3 設定
s3 = boto3.client('s3',
aws_access_key_id='YOUR_ACCESS_KEY',
aws_secret_access_key='YOUR_SECRET_KEY',
region_name='us-east-1'
)
BUCKET_NAME = "fireplant-monitor"

while True:
pressure = bmp280.get_pressure()
data = {"pressure": pressure, "timestamp": str(datetime.now())}
file_name = f"pressure/{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.json"
s3.put_object(Bucket=BUCKET_NAME, Key=file_name, Body=json.dumps(data))
print(f"Uploaded: {file_name}")
time.sleep(60)

④ 排ガス成分監視(MQ-135)

🌫️ 用途:NOx, SOx 濃度監視

接続

  • MQ-135アナログ入力(ADC 必要)

Raspberry Pi 用 Python スクリプト

import time
import boto3
import json
from datetime import datetime
import Adafruit_ADS1x15

adc = Adafruit_ADS1x15.ADS1115()

# AWS S3 設定
s3 = boto3.client('s3',
aws_access_key_id='YOUR_ACCESS_KEY',
aws_secret_access_key='YOUR_SECRET_KEY',
region_name='us-east-1'
)
BUCKET_NAME = "fireplant-monitor"

while True:
gas_level = adc.read_adc(0, gain=1)
data = {"gas_level": gas_level, "timestamp": str(datetime.now())}
file_name = f"gas/{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.json"
s3.put_object(Bucket=BUCKET_NAME, Key=file_name, Body=json.dumps(data))
print(f"Uploaded: {file_name}")
time.sleep(60)

⑤ 水位異常監視(HC-SR04)

💧 用途:冷却水、給水監視

接続

  • HC-SR04GPIO

Raspberry Pi 用 Python スクリプト

import RPi.GPIO as GPIO
import time
import boto3
import json
from datetime import datetime

TRIG = 23
ECHO = 24

GPIO.setmode(GPIO.BCM)
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)

s3 = boto3.client('s3',
aws_access_key_id='YOUR_ACCESS_KEY',
aws_secret_access_key='YOUR_SECRET_KEY',
region_name='us-east-1'
)
BUCKET_NAME = "fireplant-monitor"

def get_distance():
GPIO.output(TRIG, True)
time.sleep(0.00001)
GPIO.output(TRIG, False)

while GPIO.input(ECHO) == 0:
pulse_start = time.time()

while GPIO.input(ECHO) == 1:
pulse_end = time.time()

pulse_duration = pulse_end - pulse_start
distance = pulse_duration * 17150
return round(distance, 2)

while True:
distance = get_distance()
data = {"water_level": distance, "timestamp": str(datetime.now())}
file_name = f"water/{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.json"
s3.put_object(Bucket=BUCKET_NAME, Key=file_name, Body=json.dumps(data))
print(f"Uploaded: {file_name}")
time.sleep(60)

Yamamoto Yuya

プロフェッショナルとしての高いスキルと知識を持ち、誠実さと責任感を大切にする。常に向上心を持ち、新たな挑戦にも積極的に取り組む努力家。