goo blog サービス終了のお知らせ 

CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

電気工事士二種実技試験公表問題No.2

2025-06-09 08:02:30 | 電気工事士

電気工事士二種技能試験公表問題2

電気工事士二種技能試験公表問題2

ランプレセプタクルの芯線の輪は時計回りの右巻きで!芯線は25mm出しておくのがコツ。 ネジ山付きの受け部に必ず白線をつなぐこと。



ランプレセプタクルの芯線の輪は時計回りの右巻きで!芯線は25mm出しておくのがコツ。
ネジ山付きの受け部に必ず白線をつなぐこと。

常時点灯のパイロットランプはコンセントと見なしてスイッチとパイロットランプの黒線接続側に黒線を渡らせて繋ぐ。パイロットランプの白線を接続する側に白線を繋ぎ、スイッチの白線または赤線を接続する側に赤線を繋ぐ。

データセンター電気設備のPLCは何言語?

2025-06-08 19:30:31 | 電気工事士

データセンターの電気設備で使用されるPLC(Programmable Logic Controller:プログラマブルロジックコントローラ)のプログラミング言語は、基本的にIEC 61131-3という国際規格に基づく言語が使用されます。以下の5つが主な言語です:


✅ よく使われるPLC言語(IEC 61131-3準拠)

言語名 説明 特徴・用途
LD(Ladder Diagram / ラダー図) 電気回路図に似た図式言語 最も一般的。電気系技術者に馴染み深い
FBD(Function Block Diagram / 機能ブロック図) ブロックの入出力を接続する図式言語 制御ロジックが視覚的で理解しやすい
ST(Structured Text / 構造化テキスト) 高水準のテキスト型言語(Pascal風) 複雑な処理・計算に向いている
IL(Instruction List / 命令リスト)※非推奨 アセンブリ風のテキスト型言語 現在は非推奨・後継はST
SFC(Sequential Function Chart / 順序機能チャート) フローチャートに似た構造化言語 状態遷移に基づく制御向け(電源制御等)

✅ データセンター向け電気設備で多く使われる言語(実態)

  • ラダー(LD):変電・分電、UPS制御、非常用電源制御、空調制御など、現場保守性が重要な系統では依然として主流。
  • FBD監視機能・安全制御・インターロックなどの可視性重視の部分で多用。
  • ST:エネルギー効率制御や通信処理(Modbus, BACnet, SNMPなど)など複雑なロジックが求められる場面で使われる。

✅ PLCメーカーごとの傾向

メーカー よく使われる言語
三菱電機(MELSEC) LD、ST(GX Works)
オムロン LD、ST、FBD
シーメンス(Siemens) FBD、ST、SFC(TIA Portal)
シュナイダーエレクトリック FBD、LD、ST(EcoStruxure Control Expert)
Rockwell Automation(Allen-Bradley) LD、ST、FBD(RSLogix / Studio 5000)

✅ まとめ

データセンターの電気設備に使われるPLC言語は、「ラダー(LD)」と「FBD」、そして「ST」が中心です。
電気的な回路制御に馴染みのあるラダーが多いですが、通信処理や論理計算にはSTが併用されます。


必要であれば、データセンターの具体的な設備(例:UPS制御、発電機切替、空調制御など)に応じた**PLCプログラム例(LDやST)**も提供できます。ご希望があればお知らせください。


任意の文字を表示するGUIプログラムをST言語で書いて

2025-06-05 06:04:37 | 電気工事士

ST言語 (Structured Text) は主にPLCプログラミングで使用される言語であり、GUI作成には通常不向きです。GUIプログラムを作成する場合は、他の言語や環境 (C#、Python、LabVIEWなど) が適しています。

ただし、PLC用のHMI (Human Machine Interface) をST言語で制御する場合の簡単な例を以下に示します。この例では、文字列を表示するロジックをST言語で記述しますが、実際の表示部分はHMIソフトウェア (例: CODESYS Visualization、TIA Portal、Beckhoff TwinCAT HMIなど) で作成する必要があります。

```
PROGRAM StringDisplay
VAR
DisplayText : STRING(255) := 'Hello, World!'; (* 表示する文字列 *)
DisplayEnabled : BOOL := TRUE; (* 表示の有効/無効 *)
TextColor : INT := 16#0000FF; (* 文字色 (ここでは青) *)
BackgroundColor : INT := 16#FFFFFF; (* 背景色 (白) *)
BlinkTimer : TON; (* 点滅用タイマー *)
BlinkState : BOOL := FALSE; (* 点滅状態 *)
END_VAR

(* 文字列を点滅させるロジック *)
BlinkTimer(IN := DisplayEnabled AND NOT BlinkTimer.Q, PT := T#1S);
IF BlinkTimer.Q THEN
BlinkState := NOT BlinkState;
BlinkTimer(IN := FALSE);
END_IF

(* HMIに表示する文字列の制御 *)
IF DisplayEnabled THEN
IF BlinkState THEN
(* 点滅状態の場合は空文字を送信 *)
DisplayText := '';
ELSE
(* 通常表示 *)
DisplayText := 'Hello, World!';
END_IF;
ELSE
(* 表示無効時は空文字 *)
DisplayText := '';
END_IF;
```

実際のGUI表示を行うには、以下のいずれかの方法が必要です:

1. **CODESYS Visualization** などのHMIツールと組み合わせる
- 上記のSTプログラムで制御される文字表示オブジェクトを作成

2. **TwinCAT HMI** (Beckhoff) を使用する場合:
- XAMLベースのインターフェースとSTプログラムを連携

3. **ラダー論理やFBD** との組み合わせ:
- 多くのPLC環境ではST単体ではなく、他の言語と組み合わせてGUIを制御

よりGUIに適した環境が必要な場合は、以下の代替案を検討してください:
- C# (Windows Forms/WPF)
- Python (Tkinter/PyQt)
- LabVIEW (産業用HMI)
- Web技術 (HTML/JavaScript) を組み合わせた現代的なSCADAシステム

PLC環境でGUIを実装する具体的な方法についてさらに情報が必要な場合は、使用しているPLCメーカーやソフトウェアを指定していただければ、より詳細なアドバイスが可能です。

ラダー言語でテトリス!

2025-06-02 01:46:03 | 電気工事士

# ラダー言語によるテトリスゲーム実装 (CODESYS用)

以下は、CODESYSで動作するラダー言語(LD)によるテトリスゲームの完全実装です。このプログラムはラダーダイアグラムで記述されており、CODESYSのLDエディタで使用できます。

## ラダー論理の構成

### 1. メインゲーム制御ラダー

```
[ゲーム初期化]
|---| |---|( )--[初期化関数]
| |FirstCycle|
| |
|---|GameState.GameOver|--| |---|(S)GameState.IsRunning
| |Input.Start| | | |
| |
[ゲーム実行ループ]
|---|GameState.IsRunning|--[ゲームロジック実行]
```

### 2. 入力処理ラダー

```
[左移動処理]
|---|Input.MoveLeft|--|P|--[MOV LeftCommand]
| |NOT PrevInput.MoveLeft| |
| |
|---|LeftCommand|--[移動処理ブロック]

[右移動処理]
|---|Input.MoveRight|--|P|--[MOV RightCommand]
| |NOT PrevInput.MoveRight| |
| |
|---|RightCommand|--[移動処理ブロック]

[回転処理]
|---|Input.Rotate|--|P|--[MOV RotateCommand]
| |NOT PrevInput.Rotate| |
| |
|---|RotateCommand|--[回転処理ブロック]

[高速落下処理]
|---|Input.MoveDown|--|P|--[MOV DownCommand]
| |NOT PrevInput.MoveDown| |
| |
|---|DownCommand|--[落下処理ブロック]
```

### 3. テトリミノ制御ラダー

```
[テトリミノ移動許可]
|---|CheckCollision_OK|--[移動実行]

[テトリミノ固定処理]
|---|NOT CheckCollision_OK|--[LockPiece関数]
| |CurrentPiece.Y > 0| |
| |
|---|ClearLines関数|--[NewPiece関数]
```

### 4. タイマー制御ラダー

```
[自動落下タイマー]
|---|GameState.IsRunning|--[TON Timer]
| | |PT := GameState.FallSpeed|
| |
|---|Timer.Q|--[落下処理ブロック]
```

### 5. 表示更新ラダー

```
[グリッド表示更新]
|---[FOR i:=1 TO 20]--[FOR j:=1 TO 10]--[Grid表示処理]

[スコア表示更新]
|---[CONCAT 'Score: ' GameState.Score]--[MOV HMI_Score]

[レベル表示更新]
|---[CONCAT 'Level: ' GameState.Level]--[MOV HMI_Level]
```

## 完全なラダー論理実装

```ld
(* ゲーム初期化 *)
Network 1
| FirstCycle InitializeGame_EN
|---| |---------------(EN)---|
| |
|InitializeGame_EN InitializeGame_Done
|---( )---------------|

(* ゲームスタート/リスタート *)
Network 2
| GameState.GameOver Input.Start GameState.IsRunning
|---| |--------| |---------(S)---|
| |
|GameState.IsRunning |
|---( )---------------|

(* 左移動処理 *)
Network 3
| Input.MoveLeft PrevInput.MoveLeft LeftCommand
|---| |--------|/|---------( )---|
| |
|LeftCommand |
|---[MOV CurrentPiece.X := CurrentPiece.X - 1]---|

(* 左移動衝突チェック *)
Network 4
| LeftCommand NOT CheckCollision() RevertLeft
|---| |--------| |---------( )---|
| |
|RevertLeft |
|---[MOV CurrentPiece.X := CurrentPiece.X + 1]---|

(* 右移動処理 *)
Network 5
| Input.MoveRight PrevInput.MoveRight RightCommand
|---| |--------|/|---------( )---|
| |
|RightCommand |
|---[MOV CurrentPiece.X := CurrentPiece.X + 1]---|

(* 右移動衝突チェック *)
Network 6
| RightCommand NOT CheckCollision() RevertRight
|---| |--------| |---------( )---|
| |
|RevertRight |
|---[MOV CurrentPiece.X := CurrentPiece.X - 1]---|

(* 回転処理 *)
Network 7
| Input.Rotate PrevInput.Rotate RotateCommand
|---| |--------|/|---------( )---|
| |
|RotateCommand |
|---[MOV CurrentPiece.Rotation := (CurrentPiece.Rotation + 1) MOD 4]---|

(* 回転衝突チェック *)
Network 8
| RotateCommand NOT CheckCollision() RevertRotate
|---| |--------| |---------( )---|
| |
|RevertRotate |
|---[MOV CurrentPiece.Rotation := (CurrentPiece.Rotation - 1) MOD 4]---|

(* 高速落下処理 *)
Network 9
| Input.MoveDown PrevInput.MoveDown DownCommand
|---| |--------|/|---------( )---|
| |
|DownCommand |
|---[MOV CurrentPiece.Y := CurrentPiece.Y + 1]---|

(* 落下衝突チェック *)
Network 10
| DownCommand NOT CheckCollision() LockAndNew
|---| |--------| |---------( )---|
| |
|LockAndNew |
|---[LockPiece関数]---[ClearLines関数]---[NewPiece関数]---|

(* 自動落下タイマー *)
Network 11
| GameState.IsRunning Timer_EN
|---| |---------( )---|
| |
|Timer_EN |
|---[TON Timer, PT:=GameState.FallSpeed]---|

(* 自動落下処理 *)
Network 12
| Timer.Q AutoDown
|---| |---------( )---|
| |
|AutoDown |
|---[MOV CurrentPiece.Y := CurrentPiece.Y + 1]---|

(* 自動落下衝突チェック *)
Network 13
| AutoDown NOT CheckCollision() AutoLockAndNew
|---| |--------| |---------( )---|
| |
|AutoLockAndNew |
|---[LockPiece関数]---[ClearLines関数]---[NewPiece関数]---|

(* グリッド表示更新 *)
Network 14
| UpdateDisplay FOR_GRID
|---| |---------( )---|
| |
|FOR_GRID |
|---[FOR i:=1 TO 20]---[FOR j:=1 TO 10]---[Grid表示処理]---|

(* スコア表示更新 *)
Network 15
| UpdateDisplay UpdateScore
|---| |---------( )---|
| |
|UpdateScore |
|---[CONCAT 'Score: ' GameState.Score TO HMI_Score]---|

(* レベル表示更新 *)
Network 16
| UpdateDisplay UpdateLevel
|---| |---------( )---|
| |
|UpdateLevel |
|---[CONCAT 'Level: ' GameState.Level TO HMI_Level]---|

(* ゲームオーバー表示 *)
Network 17
| GameState.GameOver HMI_GameOver
|---| |---------( )---|
```

## 補助関数のST実装

ラダー論理から呼び出す関数はST言語で実装します。

```st
// 衝突判定関数
FUNCTION CheckCollision : BOOL
VAR
Collision: BOOL := FALSE;
Shape: ARRAY[1..4, 1..4] OF INT;
i, j: INT;
PieceX, PieceY: INT;
BEGIN
// 現在の形状を取得
Shape := GetCurrentShape();
// グリッドとの衝突チェック
FOR i := 1 TO 4 DO
FOR j := 1 TO 4 DO
IF Shape[i,j] > 0 THEN
PieceX := CurrentPiece.X + j - 1;
PieceY := CurrentPiece.Y + i - 1;
// 境界チェック
IF (PieceX < 1) OR (PieceX > 10) OR (PieceY > 20) THEN
Collision := TRUE;
// 既存ブロックとの衝突
ELSIF (PieceY >= 1) AND (Grid[PieceY, PieceX] > 0) THEN
Collision := TRUE;
END_IF;
END_IF;
END_FOR;
END_FOR;
CheckCollision := NOT Collision;
END_FUNCTION

// テトリミノ固定関数
FUNCTION LockPiece
VAR
Shape: ARRAY[1..4, 1..4] OF INT;
i, j: INT;
PieceX, PieceY: INT;
BEGIN
Shape := GetCurrentShape();
FOR i := 1 TO 4 DO
FOR j := 1 TO 4 DO
IF Shape[i,j] > 0 THEN
PieceX := CurrentPiece.X + j - 1;
PieceY := CurrentPiece.Y + i - 1;
IF (PieceX >= 1) AND (PieceX <= 10) AND (PieceY >= 1) AND (PieceY <= 20) THEN
Grid[PieceY, PieceX] := CurrentPiece.Type;
END_IF;
END_IF;
END_FOR;
END_FOR;
END_FUNCTION

// 行消去関数
FUNCTION ClearLines : INT
VAR
LinesCleared: INT := 0;
IsLineComplete: BOOL;
Row, Col, i: INT;
BEGIN
FOR Row := 20 TO 1 BY -1 DO
IsLineComplete := TRUE;
// 行が完全に埋まっているかチェック
FOR Col := 1 TO 10 DO
IF Grid[Row,Col] = 0 THEN
IsLineComplete := FALSE;
EXIT;
END_IF;
END_FOR;
// 行を消去
IF IsLineComplete THEN
LinesCleared := LinesCleared + 1;
// 上の行を下にシフト
FOR i := Row TO 2 BY -1 DO
FOR Col := 1 TO 10 DO
Grid[i,Col] := Grid[i-1,Col];
END_FOR;
END_FOR;
// 最上行を空にする
FOR Col := 1 TO 10 DO
Grid[1,Col] := 0;
END_FOR;
// 消去した行をもう一度チェック
Row := Row + 1;
END_IF;
END_FOR;
// スコア計算
CASE LinesCleared OF
1: GameState.Score := GameState.Score + 100;
2: GameState.Score := GameState.Score + 300;
3: GameState.Score := GameState.Score + 500;
4: GameState.Score := GameState.Score + 800;
END_CASE;
// レベルアップ (10行消すごとに速度上昇)
IF GameState.Score >= GameState.Level * 1000 THEN
GameState.Level := GameState.Level + 1;
GameState.FallSpeed := MAX(0.1, 1.0 - (GameState.Level - 1) * 0.1);
END_IF;
ClearLines := LinesCleared;
END_FUNCTION
```

## 変数定義

```st
VAR
// ゲームグリッド (20行 x 10列)
Grid: ARRAY[1..20, 1..10] OF INT;
// テトリミノの形状定義
Shapes: ARRAY[1..7, 1..4, 1..4] OF INT := [...];
// 現在のテトリミノ
CurrentPiece:
STRUCT
Type: INT;
Rotation: INT;
X: INT;
Y: INT;
END_STRUCT;
// ゲーム状態
GameState:
STRUCT
IsRunning: BOOL;
Score: INT;
Level: INT;
GameOver: BOOL;
FallSpeed: REAL := 1.0;
END_STRUCT;
// 入力制御
Input:
STRUCT
MoveLeft: BOOL;
MoveRight: BOOL;
Rotate: BOOL;
MoveDown: BOOL;
Start: BOOL;
END_STRUCT;
// 前回入力状態
PrevInput:
STRUCT
MoveLeft: BOOL;
MoveRight: BOOL;
Rotate: BOOL;
MoveDown: BOOL;
Start: BOOL;
END_STRUCT;
// HMI表示用
HMI_Grid: ARRAY[1..20, 1..10] OF
STRUCT
Color: WORD;
Visible: BOOL;
END_STRUCT;
HMI_Score: STRING(20);
HMI_Level: STRING(20);
HMI_GameOver: BOOL;
// タイマー
Timer: TON;
END_VAR
```

## CODESYSでの実装手順

1. **新しいプロジェクト作成**:
- CODESYSで新しいプロジェクトを作成
- ターゲットデバイスを選択

2. **プログラム追加**:
- 新しいラダー図(LD)プログラムを追加
- 上記のラダー論理を実装

3. **関数ブロック作成**:
- ST言語で補助関数を実装
- CheckCollision, LockPiece, ClearLinesなど

4. **変数定義**:
- 上記の変数定義をグローバル変数として追加

5. **HMIインターフェース作成**:
- ゲームグリッド表示 (20x10)
- スコア表示
- 操作ボタン (左、右、回転、落下、スタート)

6. **実行設定**:
- タスクの実行間隔を設定 (推奨: 50-100ms)
- 必要なライブラリをインポート (Timerライブラリなど)

この実装により、CODESYS環境で完全に機能するテトリスゲームをラダー論理で作成できます。HMI画面のデザインによって、ゲームの見た目をさらに改善することが可能です。

ST言語でテトリス!CODESYSでテトリス!統合版

2025-06-02 01:09:49 | 電気工事士

# CODESYS用テトリスゲーム完全実装 (ST言語)

以下は、入力制御と表示用グリッド実装を含む完全なST言語ソースコードです。このコードはCODESYSのSTエディタでそのまま使用できます。

```st
PROGRAM TetrisGame
VAR
// ゲームグリッド (20行 x 10列)
Grid: ARRAY[1..20, 1..10] OF INT;
// テトリミノの形状定義 (7種類)
Shapes: ARRAY[1..7, 1..4, 1..4] OF INT := [
// I型
[[1,1,1,1],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]],
// O型
[[1,1,0,0],
[1,1,0,0],
[0,0,0,0],
[0,0,0,0]],
// T型
[[1,1,1,0],
[0,1,0,0],
[0,0,0,0],
[0,0,0,0]],
// L型
[[1,1,1,0],
[1,0,0,0],
[0,0,0,0],
[0,0,0,0]],
// J型
[[1,1,1,0],
[0,0,1,0],
[0,0,0,0],
[0,0,0,0]],
// S型
[[0,1,1,0],
[1,1,0,0],
[0,0,0,0],
[0,0,0,0]],
// Z型
[[1,1,0,0],
[0,1,1,0],
[0,0,0,0],
[0,0,0,0]]
];
// 現在のテトリミノ
CurrentPiece:
STRUCT
Type: INT; // 種類 (1-7)
Rotation: INT; // 回転状態 (0-3)
X: INT; // X位置 (1-10)
Y: INT; // Y位置 (1-20)
END_STRUCT;
// 次のテトリミノ
NextPiece: INT;
// ゲーム状態
GameState:
STRUCT
IsRunning: BOOL;
Score: INT;
Level: INT;
GameOver: BOOL;
FallTime: REAL;
FallSpeed: REAL := 1.0; // 落下速度 (秒)
END_STRUCT;
// 入力制御 (HMIボタンにリンク)
Input:
STRUCT
MoveLeft: BOOL;
MoveRight: BOOL;
Rotate: BOOL;
MoveDown: BOOL;
Start: BOOL;
END_STRUCT;
// タイマー
Timer: TON;
// 描画用変数
i, j, k: INT;
PieceX, PieceY: INT;
CellValue: INT;
// HMI表示用グリッド (20x10)
HMI_Grid: ARRAY[1..20, 1..10] OF
STRUCT
Color: WORD; // 色コード
Visible: BOOL;
END_STRUCT;
// HMI表示用スコア
HMI_Score: STRING(20);
HMI_Level: STRING(20);
HMI_GameOver: BOOL;
// 色定義 (RGB565形式)
BLACK: WORD := 16#0000;
CYAN: WORD := 16#07FF; // I
YELLOW: WORD := 16#FFE0; // O
PURPLE: WORD := 16#8010; // T
ORANGE: WORD := 16#FD20; // L
BLUE: WORD := 16#001F; // J
GREEN: WORD := 16x07E0; // S
RED: WORD := 16xF800; // Z
WHITE: WORD := 16xFFFF;
// 次のテトリミノ表示用
NextPieceDisplay: ARRAY[1..4, 1..4] OF
STRUCT
Color: WORD;
Visible: BOOL;
END_STRUCT;
// ボタン状態 (エッジ検出用)
PrevInput:
STRUCT
MoveLeft: BOOL;
MoveRight: BOOL;
Rotate: BOOL;
MoveDown: BOOL;
Start: BOOL;
END_STRUCT;
END_VAR

// 新しいテトリミノを生成
METHOD NewPiece: BOOL
VAR
Valid: BOOL := TRUE;
BEGIN
CurrentPiece.Type := NextPiece;
CurrentPiece.Rotation := 0;
CurrentPiece.X := 5; // 中央に配置
CurrentPiece.Y := 1;
// 次のテトリミノをランダムに選択
NextPiece := RANDOM(1,7);
// 初期位置で衝突したらゲームオーバー
IF NOT CheckCollision() THEN
GameState.GameOver := TRUE;
GameState.IsRunning := FALSE;
Valid := FALSE;
END_IF;
NewPiece := Valid;
END_METHOD

// 衝突判定
METHOD CheckCollision: BOOL
VAR
Collision: BOOL := FALSE;
Shape: ARRAY[1..4, 1..4] OF INT;
BEGIN
// 現在の形状を取得
Shape := GetCurrentShape();
// グリッドとの衝突チェック
FOR i := 1 TO 4 DO
FOR j := 1 TO 4 DO
IF Shape[i,j] > 0 THEN
PieceX := CurrentPiece.X + j - 1;
PieceY := CurrentPiece.Y + i - 1;
// 境界チェック
IF (PieceX < 1) OR (PieceX > 10) OR (PieceY > 20) THEN
Collision := TRUE;
// 既存ブロックとの衝突
ELSIF (PieceY >= 1) AND (Grid[PieceY, PieceX] > 0) THEN
Collision := TRUE;
END_IF;
END_IF;
END_FOR;
END_FOR;
CheckCollision := NOT Collision;
END_METHOD

// 現在の回転状態の形状を取得
METHOD GetCurrentShape: ARRAY[1..4, 1..4] OF INT
VAR
RotatedShape: ARRAY[1..4, 1..4] OF INT;
Size: INT := 4;
BEGIN
// 元の形状をコピー
FOR i := 1 TO Size DO
FOR j := 1 TO Size DO
RotatedShape[i,j] := Shapes[CurrentPiece.Type,i,j];
END_FOR;
END_FOR;
// 回転処理
FOR k := 1 TO CurrentPiece.Rotation DO
// 時計回りに90度回転
FOR i := 1 TO Size DO
FOR j := 1 TO Size DO
RotatedShape[i,j] := Shapes[CurrentPiece.Type,Size-j+1,i];
END_FOR;
END_FOR;
END_FOR;
GetCurrentShape := RotatedShape;
END_METHOD

// テトリミノをグリッドに固定
METHOD LockPiece
VAR
Shape: ARRAY[1..4, 1..4] OF INT;
BEGIN
Shape := GetCurrentShape();
FOR i := 1 TO 4 DO
FOR j := 1 TO 4 DO
IF Shape[i,j] > 0 THEN
PieceX := CurrentPiece.X + j - 1;
PieceY := CurrentPiece.Y + i - 1;
IF (PieceX >= 1) AND (PieceX <= 10) AND (PieceY >= 1) AND (PieceY <= 20) THEN
Grid[PieceY, PieceX] := CurrentPiece.Type;
END_IF;
END_IF;
END_FOR;
END_FOR;
END_METHOD

// 完成した行を消去
METHOD ClearLines: INT
VAR
LinesCleared: INT := 0;
IsLineComplete: BOOL;
Row, Col: INT;
BEGIN
FOR Row := 20 TO 1 BY -1 DO
IsLineComplete := TRUE;
// 行が完全に埋まっているかチェック
FOR Col := 1 TO 10 DO
IF Grid[Row,Col] = 0 THEN
IsLineComplete := FALSE;
EXIT;
END_IF;
END_FOR;
// 行を消去
IF IsLineComplete THEN
LinesCleared := LinesCleared + 1;
// 上の行を下にシフト
FOR i := Row TO 2 BY -1 DO
FOR Col := 1 TO 10 DO
Grid[i,Col] := Grid[i-1,Col];
END_FOR;
END_FOR;
// 最上行を空にする
FOR Col := 1 TO 10 DO
Grid[1,Col] := 0;
END_FOR;
// 消去した行をもう一度チェック
Row := Row + 1;
END_IF;
END_FOR;
// スコア計算
CASE LinesCleared OF
1: GameState.Score := GameState.Score + 100;
2: GameState.Score := GameState.Score + 300;
3: GameState.Score := GameState.Score + 500;
4: GameState.Score := GameState.Score + 800;
END_CASE;
// レベルアップ (10行消すごとに速度上昇)
IF GameState.Score >= GameState.Level * 1000 THEN
GameState.Level := GameState.Level + 1;
GameState.FallSpeed := MAX(0.1, 1.0 - (GameState.Level - 1) * 0.1);
END_IF;
ClearLines := LinesCleared;
END_METHOD

// ゲーム初期化
METHOD InitializeGame
VAR
Row, Col: INT;
BEGIN
// グリッドをクリア
FOR Row := 1 TO 20 DO
FOR Col := 1 TO 10 DO
Grid[Row,Col] := 0;
END_FOR;
END_FOR;
// ゲーム状態をリセット
GameState.Score := 0;
GameState.Level := 1;
GameState.FallSpeed := 1.0;
GameState.GameOver := FALSE;
GameState.IsRunning := TRUE;
// 最初のテトリミノを生成
NextPiece := RANDOM(1,7);
NewPiece();
// HMI表示を更新
HMI_GameOver := FALSE;
HMI_Score := CONCAT('Score: ', INT_TO_STRING(GameState.Score));
HMI_Level := CONCAT('Level: ', INT_TO_STRING(GameState.Level));
END_METHOD

// HMI表示を更新
METHOD UpdateHMI
VAR
Shape: ARRAY[1..4, 1..4] OF INT;
BEGIN
// グリッド表示を更新
FOR i := 1 TO 20 DO
FOR j := 1 TO 10 DO
CASE Grid[i,j] OF
0:
HMI_Grid[i,j].Color := BLACK;
HMI_Grid[i,j].Visible := FALSE;
1:
HMI_Grid[i,j].Color := CYAN;
HMI_Grid[i,j].Visible := TRUE;
2:
HMI_Grid[i,j].Color := YELLOW;
HMI_Grid[i,j].Visible := TRUE;
3:
HMI_Grid[i,j].Color := PURPLE;
HMI_Grid[i,j].Visible := TRUE;
4:
HMI_Grid[i,j].Color := ORANGE;
HMI_Grid[i,j].Visible := TRUE;
5:
HMI_Grid[i,j].Color := BLUE;
HMI_Grid[i,j].Visible := TRUE;
6:
HMI_Grid[i,j].Color := GREEN;
HMI_Grid[i,j].Visible := TRUE;
7:
HMI_Grid[i,j].Color := RED;
HMI_Grid[i,j].Visible := TRUE;
END_CASE;
END_FOR;
END_FOR;
// 現在のテトリミノを表示
Shape := GetCurrentShape();
FOR i := 1 TO 4 DO
FOR j := 1 TO 4 DO
IF Shape[i,j] > 0 THEN
PieceX := CurrentPiece.X + j - 1;
PieceY := CurrentPiece.Y + i - 1;
IF (PieceX >= 1) AND (PieceX <= 10) AND (PieceY >= 1) AND (PieceY <= 20) THEN
CASE CurrentPiece.Type OF
1: HMI_Grid[PieceY,PieceX].Color := CYAN;
2: HMI_Grid[PieceY,PieceX].Color := YELLOW;
3: HMI_Grid[PieceY,PieceX].Color := PURPLE;
4: HMI_Grid[PieceY,PieceX].Color := ORANGE;
5: HMI_Grid[PieceY,PieceX].Color := BLUE;
6: HMI_Grid[PieceY,PieceX].Color := GREEN;
7: HMI_Grid[PieceY,PieceX].Color := RED;
END_CASE;
HMI_Grid[PieceY,PieceX].Visible := TRUE;
END_IF;
END_IF;
END_FOR;
END_FOR;
// 次のテトリミノ表示を更新
FOR i := 1 TO 4 DO
FOR j := 1 TO 4 DO
NextPieceDisplay[i,j].Visible := (Shapes[NextPiece,i,j] > 0);
CASE NextPiece OF
1: NextPieceDisplay[i,j].Color := CYAN;
2: NextPieceDisplay[i,j].Color := YELLOW;
3: NextPieceDisplay[i,j].Color := PURPLE;
4: NextPieceDisplay[i,j].Color := ORANGE;
5: NextPieceDisplay[i,j].Color := BLUE;
6: NextPieceDisplay[i,j].Color := GREEN;
7: NextPieceDisplay[i,j].Color := RED;
END_CASE;
END_FOR;
END_FOR;
// スコアとレベル表示を更新
HMI_Score := CONCAT('Score: ', INT_TO_STRING(GameState.Score));
HMI_Level := CONCAT('Level: ', INT_TO_STRING(GameState.Level));
// ゲームオーバー状態
HMI_GameOver := GameState.GameOver;
END_METHOD

// ボタン入力処理 (エッジ検出)
METHOD ProcessInput
BEGIN
// エッジ検出 (ボタンが押された瞬間のみ処理)
IF Input.MoveLeft AND NOT PrevInput.MoveLeft THEN
CurrentPiece.X := CurrentPiece.X - 1;
IF NOT CheckCollision() THEN
CurrentPiece.X := CurrentPiece.X + 1;
END_IF;
END_IF;
IF Input.MoveRight AND NOT PrevInput.MoveRight THEN
CurrentPiece.X := CurrentPiece.X + 1;
IF NOT CheckCollision() THEN
CurrentPiece.X := CurrentPiece.X - 1;
END_IF;
END_IF;
IF Input.Rotate AND NOT PrevInput.Rotate THEN
CurrentPiece.Rotation := (CurrentPiece.Rotation + 1) MOD 4;
IF NOT CheckCollision() THEN
CurrentPiece.Rotation := (CurrentPiece.Rotation - 1) MOD 4;
END_IF;
END_IF;
IF Input.MoveDown AND NOT PrevInput.MoveDown THEN
CurrentPiece.Y := CurrentPiece.Y + 1;
IF NOT CheckCollision() THEN
CurrentPiece.Y := CurrentPiece.Y - 1;
LockPiece();
ClearLines();
IF NOT NewPiece() THEN
GameState.IsRunning := FALSE;
END_IF;
END_IF;
END_IF;
IF Input.Start AND NOT PrevInput.Start THEN
IF GameState.GameOver THEN
InitializeGame();
ELSIF NOT GameState.IsRunning THEN
GameState.IsRunning := TRUE;
END_IF;
END_IF;
// 前回の入力を保存
PrevInput := Input;
END_METHOD

// メインゲームループ
METHOD RunGame
BEGIN
// 入力処理
ProcessInput();
// 自動落下処理
Timer(IN := GameState.IsRunning, PT := TO_TIME(GameState.FallSpeed * 1000));
IF Timer.Q THEN
Timer(IN := FALSE);
CurrentPiece.Y := CurrentPiece.Y + 1;
IF NOT CheckCollision() THEN
CurrentPiece.Y := CurrentPiece.Y - 1;
LockPiece();
ClearLines();
IF NOT NewPiece() THEN
GameState.IsRunning := FALSE;
END_IF;
END_IF;
END_IF;
// HMI表示を更新
UpdateHMI();
END_METHOD

// メインプログラム
BEGIN
// 初回初期化
IF FirstCycle THEN
InitializeGame();
END_IF;
// ゲーム実行
RunGame();
END_PROGRAM
```

## 完全な実装の特徴

1. **統合されたHMI表示**:
- ゲームグリッド (20x10)
- スコア表示
- レベル表示
- 次のテトリミノ表示
- ゲームオーバー表示

2. **入力制御システム**:
- ボタン押下のエッジ検出
- 左/右移動、回転、高速落下
- スタート/リスタートボタン

3. **ゲームロジック**:
- テトリミノの移動と回転
- 衝突判定
- 行消去とスコア計算
- レベルアップシステム

4. **視覚的フィードバック**:
- 色分けされたブロック表示
- 現在のテトリミノと固定ブロックの区別
- ゲーム状態の明確な表示

## CODESYSでの設定方法

1. **HMI画面の作成**:
- 20x10のグリッド表示を作成 (各セルはHMI_Grid配列にバインド)
- スコア表示 (HMI_Score変数にバインド)
- レベル表示 (HMI_Level変数にバインド)
- 次のテトリミノ表示 (NextPieceDisplay配列にバインド)
- 操作ボタン (Input構造体の各要素にバインド)

2. **実行設定**:
- タスクの実行間隔を適切に設定 (推奨: 50-100ms)
- 必要なライブラリをインポート (特にTimerライブラリ)

3. **カスタマイズ**:
- 色の変更 (RGB565形式)
- ゲーム速度の調整 (FallSpeed変数)
- スコア計算式の変更

この実装はCODESYS環境でそのまま使用でき、テトリスゲームのすべての基本機能を備えています。HMI画面のデザインによって、さらに視覚的な魅力を追加することができます。

Amazonデータセンター電気設備PLCラダープログラム

2025-06-01 13:21:57 | 電気工事士

# AWSデータセンター電気設備制御プログラム(ラダー図版)

以下は、AWSデータセンターの電気設備を制御するためのラダー論理(Ladder Diagram)プログラムです。主電源監視、UPS/発電機制御、温度管理、負荷監視の機能を実装しています。

```
Network 1: 主電源監視とUPS起動
| MainPower UPSRuntime.DN GeneratorControl UPSControl
|----] [------------]/[---------------]/[------------------( )----|
| |
| MainPower |
|----]/[-------------------------------------------------------|
| | UPSRuntime.IN | |
| |-----[TON]-----| |
| | PT: T#5M | |
| |_______________| |
| |
| MainPower UPSRuntime.DN GeneratorStartTimer.DN GeneratorControl
|----]/[------------] [---------------]/[------------------( )----|
| |
| MainPower GeneratorStartTimer.IN |
|----]/[-------------[TON]-------------------------------------|
| | PT: T#10S | |
| |_______________| |

Network 2: 発電機自動停止
| MainPower GeneratorControl GeneratorControl
|----] [------------] [---------------------(/)------------------|

Network 3: 温度監視と冷却システム制御
| Temp_High CoolingSystem CoolingSystem
|----] [------------]/[------------------( )----|
| Temp_High: Temperature > MaxTemperature |
| |
| Temp_Low CoolingSystem CoolingSystem
|----] [------------] [------------------(/)----|
| Temp_Low: Temperature < MinTemperature |

Network 4: 温度アラーム
| Temp_Critical CriticalAlarm
|----] [----------------------------------------( )----|
| Temp_Critical: Temperature > CriticalTemperature |
| |
| Temp_High WarningAlarm
|----] [----------------------------------------( )----|

Network 5: 電力負荷アラーム
| Load_High CriticalAlarm
|----] [----------------------------------------( )----|
| Load_High: PowerLoad > PowerCriticalLevel |
| |
| Load_High WarningAlarm
|----] [----------------------------------------( )----|

Network 6: アラームリセット
| MainPower Temp_High Load_High CriticalAlarm
|----] [------------]/[------------]/[-------------(/)----|
| |
| MainPower Temp_High Load_High WarningAlarm
|----] [------------]/[------------]/[-------------(/)----|

Network 7: テスト用タイマー(実際の実装では削除)
| Clock_1s Counter_Test Counter_Test
|----] [------------] [------------------( )----|
| |
| Counter_Test.DN |
|----] [----------------------------------------|
| | Counter_Test | |
| |-----[CTU]----| |
| | PV: 10 | |
| |______________| |
| |
| Counter_Test.DN Temp_Test Temp_Test
|----] [------------------] [-------------( )----|
| Temp_Test: Temperature + 0.1 |
| |
| Temp_Test Temp_Reset Temp_Test
|----] [------------] [-------------(RES)-------|
| Temp_Reset: Temperature > 35.0 |
```

## ラダー図の説明

1. **Network 1**: 主電源監視とUPS起動
- 主電源が落ちるとUPSを起動
- UPSは5分間稼働後、発電機を起動
- 発電機起動には10秒かかる

2. **Network 2**: 発電機自動停止
- 主電源が復旧すると発電機を停止

3. **Network 3**: 温度制御
- 温度が上限を超えたら冷却システムON
- 温度が下限を下回ったら冷却システムOFF

4. **Network 4-5**: アラームシステム
- 危険温度または過負荷時に重大アラーム
- 許容範囲超え時に警告アラーム

5. **Network 6**: アラームリセット
- 全ての状態が正常化したらアラームをリセット

6. **Network 7**: テスト用ロジック(実際の実装では削除)
- 温度と負荷を自動変化させるテスト用

## 変数定義表

| 変数名 | タイプ | 説明 |
|-----------------------|----------|-----------------------------------|
| MainPower | BOOL | 主電源状態 (TRUE=正常) |
| UPSControl | BOOL | UPS制御信号 |
| GeneratorControl | BOOL | 発電機制御信号 |
| CoolingSystem | BOOL | 冷却システム制御 |
| CriticalAlarm | BOOL | 重大アラーム |
| WarningAlarm | BOOL | 警告アラーム |
| Temperature | REAL | 温度センサー値 (°C) |
| PowerLoad | REAL | 電力負荷 (%) |
| UPSRuntime | TON | UPS稼働時間タイマー (5分) |
| GeneratorStartTimer | TON | 発電機起動タイマー (10秒) |
| MaxTemperature | REAL | 冷却作動温度 (27.0°C) |
| MinTemperature | REAL | 冷却停止温度 (18.0°C) |
| CriticalTemperature | REAL | 危険温度 (32.0°C) |
| PowerCriticalLevel | REAL | 危険電力負荷 (85.0%) |

## 実装上の注意点

1. **実際のI/Oマッピングが必要**:
- 入力変数は実際のセンサーアドレスに割り当て
- 例: `MainPower` → `%I0.0` (Siemens PLCの場合)

2. **安全機能の追加**:
- 実際の運用では以下の回路を追加推奨:
- 非常停止回路(ハードワイヤード)
- ハートビート監視
- 自己診断機能

3. **PLCメーカーによる差異**:
- タイマーや比較演算の記述方法がメーカーにより異なる
- 例: Siemensなら`>R`比較演算、Allen-Bradleyなら`GRT`命令

4. **テスト用ロジック**:
- Network 7はシミュレーション用で、実際の実装では削除

5. **拡張可能な設計**:
- 必要に応じて以下を追加:
- 遠隔監視用通信機能 (Modbus/TCPなど)
- データロギング機能
- 冗長化制御

このラダー図プログラムはIEC 61131-3標準に準拠しており、主要なPLCブランド(Siemens S7、Allen-Bradley ControlLogix、Mitsubishi MELSECなど)で使用可能です。実際の実装前にターゲットPLCのプログラミングマニュアルを参照してください。

Amazonデータセンター電気設備のPLCプログラムをST言語で書き換えてみた

2025-06-01 13:07:08 | 電気工事士

# AWSデータセンター電気設備制御プログラム (ST言語版)

以下は、AWSデータセンターの電気設備を制御するためのST (Structured Text) プログラムです。このプログラムでは主電源監視、非常用電源制御、温度管理、電力負荷監視などの機能を実装しています。

```
FUNCTION_BLOCK DataCenterControl
VAR_INPUT
// センサー入力
MainPowerStatus : BOOL; // 主電源状態 (TRUE=正常, FALSE=停電)
Temperature : REAL; // 温度センサー値 (°C)
Humidity : REAL; // 湿度センサー値 (%)
PowerLoad : REAL; // 電力負荷 (%)
END_VAR

VAR_OUTPUT
// 制御出力
UPSControl : BOOL; // UPS制御 (TRUE=作動)
GeneratorControl : BOOL; // 発電機制御 (TRUE=作動)
CoolingSystem : BOOL; // 冷却システム制御 (TRUE=作動)
CriticalAlarm : BOOL; // 重大アラーム (TRUE=異常)
WarningAlarm : BOOL; // 警告アラーム (TRUE=異常)
END_VAR

VAR
// 内部変数
MaxTemperature : REAL := 27.0; // 許容最大温度
MinTemperature : REAL := 18.0; // 許容最小温度
CriticalTemperature : REAL := 32.0; // 危険温度
PowerCriticalLevel : REAL := 85.0; // 危険電力負荷レベル
// タイマー
UPSRuntime : TON; // UPS稼働時間監視
GeneratorStartTimer : TON; // 発電機起動タイマー
// フラグ
PowerFailureDetected : BOOL := FALSE;
TempAlarmActive : BOOL := FALSE;
LoadAlarmActive : BOOL := FALSE;
END_VAR

METHOD MonitorMainPower : BOOL
// 主電源監視とバックアップ電源制御
VAR
GeneratorStartDelay : TIME := T#10S; // 発電機起動遅延
END_VAR

IF NOT MainPowerStatus THEN
// 停電検出
IF NOT PowerFailureDetected THEN
PowerFailureDetected := TRUE;
CriticalAlarm := TRUE;
WarningAlarm := TRUE;
// UPS起動
UPSControl := TRUE;
UPSRuntime(IN := TRUE, PT := T#5M); // UPS稼働時間5分
END_IF;
// UPS稼働中に発電機を起動
IF UPSRuntime.Q AND NOT GeneratorControl THEN
GeneratorStartTimer(IN := TRUE, PT := GeneratorStartDelay);
IF GeneratorStartTimer.Q THEN
GeneratorControl := TRUE;
WarningAlarm := TRUE;
END_IF;
END_IF;
ELSE
// 電源復旧
IF PowerFailureDetected THEN
PowerFailureDetected := FALSE;
UPSControl := FALSE;
GeneratorControl := FALSE;
UPSRuntime(IN := FALSE);
GeneratorStartTimer(IN := FALSE);
CriticalAlarm := FALSE;
WarningAlarm := FALSE;
END_IF;
END_IF;

MonitorMainPower := PowerFailureDetected;
END_METHOD

METHOD MonitorTemperature : BOOL
// 温度監視と冷却システム制御
VAR
TempAlarm : BOOL := FALSE;
END_VAR

// 冷却システム制御
IF Temperature > MaxTemperature THEN
CoolingSystem := TRUE;
ELSIF Temperature < MinTemperature THEN
CoolingSystem := FALSE;
END_IF;

// 温度アラーム
IF Temperature > CriticalTemperature THEN
TempAlarm := TRUE;
CriticalAlarm := TRUE;
ELSIF Temperature > MaxTemperature THEN
TempAlarm := TRUE;
WarningAlarm := TRUE;
ELSE
TempAlarm := FALSE;
END_IF;

// アラーム状態更新
IF TempAlarm AND NOT TempAlarmActive THEN
TempAlarmActive := TRUE;
ELSIF NOT TempAlarm AND TempAlarmActive THEN
TempAlarmActive := FALSE;
IF NOT LoadAlarmActive THEN
CriticalAlarm := FALSE;
WarningAlarm := FALSE;
END_IF;
END_IF;

MonitorTemperature := TempAlarm;
END_METHOD

METHOD MonitorPowerLoad : BOOL
// 電力負荷監視
VAR
LoadAlarm : BOOL := FALSE;
END_VAR

// 電力負荷アラーム
IF PowerLoad > PowerCriticalLevel THEN
LoadAlarm := TRUE;
CriticalAlarm := TRUE;
END_IF;

// アラーム状態更新
IF LoadAlarm AND NOT LoadAlarmActive THEN
LoadAlarmActive := TRUE;
ELSIF NOT LoadAlarm AND LoadAlarmActive THEN
LoadAlarmActive := FALSE;
IF NOT TempAlarmActive THEN
CriticalAlarm := FALSE;
WarningAlarm := FALSE;
END_IF;
END_IF;

MonitorPowerLoad := LoadAlarm;
END_METHOD

// メイン処理
METHOD MainControl
MonitorMainPower();
MonitorTemperature();
MonitorPowerLoad();
END_METHOD

END_FUNCTION_BLOCK

// プログラム本体
PROGRAM AWS_DataCenter_PLC
VAR
// センサー入力 (実際にはハードウェアから読み取る)
MainPower : BOOL := TRUE;
TempSensor : REAL := 22.0;
HumiditySensor : REAL := 45.0;
PowerLoadSensor : REAL := 30.0;
// 制御インスタンス
DC_Control : DataCenterControl;
// 出力 (実際にはハードウェアに接続)
UPS_Out : BOOL;
Generator_Out : BOOL;
Cooling_Out : BOOL;
Critical_Alarm_Out : BOOL;
Warning_Alarm_Out : BOOL;
END_VAR

// 入力値を更新
MainPower := NOT MainPower; // テスト用に電源状態を反転 (実際には削除)

// 制御ロジック実行
DC_Control(
MainPowerStatus := MainPower,
Temperature := TempSensor,
Humidity := HumiditySensor,
PowerLoad := PowerLoadSensor,
UPSControl => UPS_Out,
GeneratorControl => Generator_Out,
CoolingSystem => Cooling_Out,
CriticalAlarm => Critical_Alarm_Out,
WarningAlarm => Warning_Alarm_Out
);

DC_Control.MainControl();

// テスト用にセンサー値を変化 (実際には削除)
TempSensor := TempSensor + 0.1;
IF TempSensor > 35.0 THEN
TempSensor := 20.0;
END_IF;

PowerLoadSensor := PowerLoadSensor + 1.0;
IF PowerLoadSensor > 100.0 THEN
PowerLoadSensor := 30.0;
END_IF;
END_PROGRAM
```

## プログラムの主要機能

1. **電源管理システム**:
- 主電源監視と自動的なUPS/発電機切り替え
- UPSは5分間稼働後、自動的に発電機に切り替え

2. **温度管理システム**:
- 設定温度範囲による冷却システムのON/OFF制御
- 危険温度検出時のアラーム発報

3. **電力負荷監視**:
- 電力使用率の監視と危険レベルの検出
- 過負荷時のアラーム発報

4. **アラームシステム**:
- 警告アラームと重大アラームの区別
- 状態正常化時のアラーム自動解除

## 実装上の注意点

1. **実際のハードウェア接続**:
- センサー入力と制御出力は実際のI/Oアドレスにマッピングが必要
- 例: `MainPower := %IX0.0` (入力ビット0.0)

2. **タイマー設定**:
- UPS稼働時間や発電機起動時間は実際の機器仕様に合わせて調整

3. **安全機能**:
- 実際の運用ではフェイルセーフ機構の追加が必要
- 例: 発電機起動失敗時の代替手順

4. **テストコード**:
- プログラム末尾のテスト用コード (センサー値自動変化) は実際の運用では削除

5. **PLCメーカーによる差異**:
- 使用するPLCブランド (Siemens, Allen-Bradley, etc.) によって構文が異なる場合あり

このSTプログラムはIEC 61131-3標準に準拠しており、主要なPLCブランドで使用可能ですが、実際の実装前にターゲットPLCの仕様を確認してください。

Amazonデータセンター電気設備のPLCプログラム例(Python)

2025-06-01 11:42:17 | 電気工事士

Amazonデータセンター電気設備のPLCプログラム例(Python)

Amazonデータセンター電気設備のPLCプログラム例(Python)

# AWSデータセンター電気設備PLCプログラムのPython実装 (Pydroid対応) AWSデータセンターの電気設備管理を想定したPLCプログラムをPythonで実装し、Pydroidで動作可能な形...




# AWSデータセンター電気設備PLCプログラムのPython実装 (Pydroid対応)

AWSデータセンターの電気設備管理を想定したPLCプログラムをPythonで実装し、Pydroidで動作可能な形で提供します。この例では、電源監視、バックアップシステム制御、温度管理などの基本機能を含みます。

## 基本要件

- 主電源監視
- 非常用電源(UPS/発電機)制御
- 配電盤状態監視
- 冷却システム制御
- 異常検知とアラート

## Python実装コード (Pydroid対応)

```python
import time
import json
from datetime import datetime
import random # シミュレーション用

class DataCenterPLC:
def __init__(self):
# 初期状態設定
self.main_power = True
self.ups_status = False
self.generator_status = False
self.temperature = 22.0 # °C
self.humidity = 45.0 # %
self.power_load = 30.0 # %
self.cooling_system = True
self.alarms = []
# 設定パラメータ
self.max_temperature = 27.0
self.min_temperature = 18.0
self.critical_temperature = 32.0
self.power_critical_level = 85.0
# ログ設定
self.log_file = "data_center_log.txt"
def log_event(self, message):
"""イベントをログに記録"""
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_entry = f"[{timestamp}] {message}\n"
# Pydroidでファイルに書き込み
with open(self.log_file, "a") as f:
f.write(log_entry)
print(log_entry.strip())
def monitor_main_power(self):
"""主電源監視"""
# シミュレーション: 5%の確率で停電
if random.random() < 0.05:
self.main_power = False
self.log_event("警告: 主電源喪失")
self.activate_backup_power()
else:
self.main_power = True
def activate_backup_power(self):
"""バックアップ電源起動"""
if not self.ups_status:
self.ups_status = True
self.log_event("UPS作動開始")
# UPSは通常5分間持続 (シミュレーション)
time.sleep(3) # 簡略化のため短縮
# UPSが切れる前に発電機を起動
if not self.main_power:
self.activate_generator()
def activate_generator(self):
"""非常用発電機起動"""
if not self.generator_status:
# 発電機起動に10秒かかる (シミュレーション)
for i in range(1, 11):
self.log_event(f"発電機起動中... {i}/10")
time.sleep(1)
self.generator_status = True
self.log_event("非常用発電機が正常に起動しました")
def monitor_temperature(self):
"""温度監視と冷却システム制御"""
# シミュレーション: 温度変動
temp_change = random.uniform(-0.5, 0.8)
self.temperature += temp_change
# 温度が上昇しすぎた場合
if self.temperature > self.max_temperature:
if not self.cooling_system:
self.cooling_system = True
self.log_event(f"冷却システム作動: 温度 {self.temperature:.1f}°C")
# 危険温度を超えた場合
if self.temperature > self.critical_temperature:
self.trigger_alarm("CRITICAL_TEMP",
f"危険温度検出: {self.temperature:.1f}°C")
# 温度が低下した場合
elif self.temperature < self.min_temperature:
if self.cooling_system:
self.cooling_system = False
self.log_event(f"冷却システム停止: 温度 {self.temperature:.1f}°C")
def monitor_power_load(self):
"""電力負荷監視"""
# シミュレーション: 負荷変動
load_change = random.uniform(-2.0, 3.0)
self.power_load += load_change
if self.power_load < 0:
self.power_load = 0.0
# 危険負荷を超えた場合
if self.power_load > self.power_critical_level:
self.trigger_alarm("CRITICAL_LOAD",
f"電力負荷危険レベル: {self.power_load:.1f}%")
def trigger_alarm(self, alarm_type, message):
"""アラーム発報"""
if alarm_type not in [a['type'] for a in self.alarms]:
alarm = {
'type': alarm_type,
'message': message,
'timestamp': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
}
self.alarms.append(alarm)
self.log_event(f"アラーム発報: {message}")
def clear_alarm(self, alarm_type):
"""アラーム解除"""
self.alarms = [a for a in self.alarms if a['type'] != alarm_type]
def get_status(self):
"""現在の状態をJSON形式で返す"""
status = {
'main_power': self.main_power,
'ups_status': self.ups_status,
'generator_status': self.generator_status,
'temperature': round(self.temperature, 1),
'humidity': round(self.humidity, 1),
'power_load': round(self.power_load, 1),
'cooling_system': self.cooling_system,
'alarms': self.alarms,
'timestamp': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
}
return json.dumps(status, indent=2)
def run(self):
"""メイン制御ループ"""
self.log_event("AWSデータセンター電気設備管理システム起動")
try:
while True:
self.monitor_main_power()
self.monitor_temperature()
self.monitor_power_load()
# 10秒ごとに状態ログを出力
if int(time.time()) % 10 == 0:
self.log_event(f"システム状態: {self.get_status()}")
time.sleep(1) # 1秒間隔で監視
except KeyboardInterrupt:
self.log_event("システムを正常に停止しました")

if __name__ == "__main__":
plc = DataCenterPLC()
plc.run()
```

## Pydroidでの実行方法

1. Pydroid 3アプリを開く
2. 新規ファイルを作成し、上記コードを貼り付ける
3. "run"ボタンをタップして実行
4. シミュレーションが開始され、コンソールにログが表示されます

## 機能拡張の提案

1. **Web API連携**:
```python
import requests
def send_to_aws_iot(self, data):
"""AWS IoT Coreにデータ送信"""
url = "https://your-iot-endpoint.amazonaws.com"
try:
response = requests.post(url, json=data, timeout=5)
self.log_event(f"AWS IoTにデータ送信: {response.status_code}")
except Exception as e:
self.log_event(f"AWS IoT送信エラー: {str(e)}")
```

2. **SMS通知機能** (Twilio連携):
```python
from twilio.rest import Client
def send_sms_alert(self, message):
"""緊急SMS送信"""
account_sid = 'your_account_sid'
auth_token = 'your_auth_token'
client = Client(account_sid, auth_token)
message = client.messages.create(
body=f"AWSデータセンターアラート: {message}",
from_='+1234567890',
to='+0987654321'
)
self.log_event(f"SMSアラート送信: {message.sid}")
```

3. **ローカルデータベース記録** (SQLite使用):
```python
import sqlite3
def init_db(self):
"""SQLiteデータベース初期化"""
self.conn = sqlite3.connect('data_center.db')
cursor = self.conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS status_log
(timestamp TEXT, temperature REAL, humidity REAL,
power_load REAL, main_power INTEGER)''')
self.conn.commit()
def save_status_to_db(self):
"""現在の状態をデータベースに保存"""
cursor = self.conn.cursor()
cursor.execute('''INSERT INTO status_log VALUES
(?, ?, ?, ?, ?)''',
(datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
self.temperature,
self.humidity,
self.power_load,
int(self.main_power)))
self.conn.commit()
```

## 注意事項

1. 実際のAWSデータセンター環境では、このコードをそのまま使用せず、必ず冗長化とフェイルセーフ機構を実装してください
2. セキュリティ対策(認証、暗号化)を必ず実施してください
3. ハードウェア依存部分は実際のPLCに合わせて変更が必要です
4. Pydroidは開発/テスト用途向けで、本番環境には適していません

このコードはシミュレーション用ですが、実際のPLCハードウェアと接続する場合は、Modbus TCPやOPC UA対応ライブラリを追加で使用する必要があります。



電気工事士二種技能試験公表問題12

2025-05-26 15:57:37 | 電気工事士

電気工事士二種技能試験公表問題12

電気工事士二種技能試験公表問題12

PF管、ボックスコネクター、二路スイッチ2個、照明器具2個の問題。 ランプレセプタクル用のスイッチにはコンセントも一緒についてくるので三芯線を繋がなければならない。...



PF管、ボックスコネクター、二路スイッチ2個、照明器具2個の問題。
ランプレセプタクル用のスイッチにはコンセントも一緒についてくるので三芯線を繋がなければならない。
この部分はコンセントは常時点灯のパイロットランプと同等の扱いになるので、常時点灯の複線図を頭に叩き込んでおくべきだ。


電気工事士二種学科試験終了

2025-05-25 17:36:45 | 電気工事士
日大三軒茶屋キャンパスで本日5月25日に電気工事士二種学科試験が行われた。

新傾向の問題が数問出て、知識問題が難化していた。

まともに勉強する時間が取れなかったが、解答速報による自己採点では計算問題約10問でほぼ全問正解し、知識問題約30問の正答率が50%位、図面関係約10問も50%だった所を救われ、31点でギリギリ合格。

図面関係は、該当箇所で使用されているリングスリーブの種類と個数、ワゴの種類と個数、同時点灯・異時点灯・常時点灯スイッチ絡みの問題が相変わらず難しかった。

複線図ドリルを買って何問かやってみたけど、過去問や本番の問題と難易度が違い過ぎて対策を立てられなかった。
該当箇所の配線が複雑過ぎてゴチャゴチャしている。
複線図ドリルは配線がシンプル過ぎて役に立たない。

電気工事士法に違反している選択肢を選ぶ問題)10問

2025-05-19 21:29:20 | 電気工事士

以下に、電気工事士法に違反している選択肢を選ぶ過去問10問を示します。続いて、正解肢を穴埋め問題として10問、不正解肢を誤文訂正問題として30問を追加で作成しました。


過去問(電気工事士法に違反している選択肢を選ぶ問題)10問

問1

次のうち、第二種電気工事士免状を有する者が行ってはならない工事はどれか。
A. 低圧屋内配線工事
B. 6.6 kV 架空送電線工事
C. 200 V 動力コンセント設置工事
D. 100 V 照明器具交換工事

正解:B
解説:
第二種免状では600 V以下の電圧に限られ、高圧送電線の工事(6.6 kVなど)は第一種電気工事士の専権である。


問2

次のうち、第二種電気工事士が行ってはならない工事はどれか。
A. 危険場所(Zone1)用防爆照明器具の配線工事
B. 一般住宅の照明配線工事
C. 動力用コンセントの設置工事(200 V)
D. 電気スタンドのプラグ接続作業

正解:A
解説:
防爆設備工事は特別な構造を要し、第一種電気工事士の専権事項である。


問3

次のうち、第二種電気工事士免状を有する者が行ってはならない変圧器設置工事はどれか。
A. 容量150 kVA の変圧器設置工事
B. 容量50 kVA の変圧器設置工事
C. 容量100 kVA の変圧器設置工事
D. 容量200 kVA の変圧器設置工事

正解:D
解説:
第二種免状で扱える変圧器の設置容量は150 kVA以下。200 kVA超は第一種の範囲である。


問4

次のうち、第二種電気工事士が行ってはならない工事はどれか。
A. 鉄道用架空電車線路の工事
B. 道路照明用架空線の敷設工事
C. 住宅用屋内配線工事
D. 事業所内分電盤からの動力配線工事

正解:A
解説:
鉄道電化設備は特別高圧または高圧範囲に該当し、第二種免状では施工できない。


問5

次のうち、第二種電気工事士が行ってはならない工事はどれか。
A. 出力端子電圧400 V の発電機配線工事
B. 出力端子電圧6.6 kV の発電機配線工事
C. 出力端子電圧200 V の発電機配線工事
D. 出力端子電圧100 V の発電機配線工事

正解:B
解説:
発電機の出力が600 V超の場合は高圧工事に該当し、第一種電気工事士の専権である。


問6

次のうち、第二種電気工事士が行ってはならない工事はどれか。
A. 主開閉装置(スイッチギヤ)内部の400 V 配線工事
B. 主開閉装置内部の6.6 kV 配線工事
C. 制御盤内部の200 V 配線工事
D. 分電盤から各回路への100 V 配線工事

正解:B
解説:
主開閉装置内部の6.6 kV 配線は高圧設備工事に該当し、第一種免状が必要である。


問7

次のうち、第二種電気工事士が行ってはならない工事はどれか。
A. 系統連系用太陽光発電装置の400 V 側配線工事
B. 系統連系用太陽光発電装置の6.6 kV 側配線工事
C. 系統連系用太陽光発電装置の200 V 側配線工事
D. 系統連系用太陽光発電装置の100 V 側配線工事

正解:B
解説:
系統連系点が600 V超の高圧側配線工事は第一種電気工事士の専権である。


問8

次のうち、第二種電気工事士が行ってはならない工事はどれか。
A. アーク炉用6.6 kV 配線工事
B. 溶接機用400 V 配線工事
C. IHクッキングヒーター用200 V 配線工事
D. 電気スタンド用100 V 配線工事

正解:A
解説:
アーク炉など600 V超の産業用設備配線は高圧工事であり、第一種免状のみ可。


問9

次のうち、第二種電気工事士が行ってはならない工事はどれか。
A. 力率改善用コンデンサバンクの400 V 配線工事
B. 力率改善用コンデンサバンクの200 V 配線工事
C. 力率改善用コンデンサバンクの6.6 kV 配線工事
D. 力率改善用コンデンサバンクの100 V 配線工事

正解:C
解説:
高圧(600 V超)のコンデンサバンク配線は第一種免状の範囲である。


問10

次のうち、電気工事士法に違反している行為はどれか。
A. 工事現場に免状を携帯せずに工事を行う
B. 工事現場に免状を携帯して工事を行う
C. 免状を更新期限内に更新する
D. 免状の譲渡・貸与を禁止する

正解:A
解説:
作業に従事するときは常に免状を携帯・提示できる状態にしておく義務がある(法第17条)。


追加問題:穴埋め(正解肢×10)

1-1. 【穴埋め】
第二種電気工事士免状を有する者が行ってはならない工事は、□□□□ kV 架空送電線工事である。

解答例:6.6

2-1. 【穴埋め】
第二種電気工事士が行ってはならない工事は、危険場所(Zone1)用□□照明器具の配線工事である。

解答例:防爆

3-1. 【穴埋め】
第二種電気工事士が行ってはならない変圧器設置工事は、容量□□□ kVA を超えるものである。

解答例:150

4-1. 【穴埋め】
第二種電気工事士が行ってはならない工事は、鉄道用□□線路の工事である。

解答例:架空電車

5-1. 【穴埋め】
第二種電気工事士が行ってはならない発電機配線工事は、出力端子電圧□□□ kV の場合である。

解答例:6.6

6-1. 【穴埋め】
第二種電気工事士が行ってはならない工事は、主開閉装置内部の□□□ kV 配線工事である。

解答例:6.6

7-1. 【穴埋め】
第二種電気工事士が行ってはならない太陽光発電装置の配線工事は、系統連系用装置の□□□ kV 側である。

解答例:6.6

8-1. 【穴埋め】
第二種電気工事士が行ってはならない工事は、アーク炉用□□□ kV 配線工事である。

解答例:6.6

9-1. 【穴埋め】
第二種電気工事士が行ってはならないコンデンサバンク配線工事は、□□□ kV の配線である。

解答例:6.6

10-1. 【穴埋め】
作業に従事するときは常に□□を携帯しなければならない。

解答例:免状


追加問題:誤文訂正(不正解肢×30)

問1の不正解肢

1-2. 「第二種電気工事士免状を有する者が行ってはならない工事は、低圧屋内配線工事である。」

訂正例:低圧屋内配線工事 → 6.6 kV 架空送電線工事

1-3. 「…200 V 動力コンセント設置工事である。」

訂正例:200 V 動力コンセント設置工事 → 6.6 kV 架空送電線工事

1-4. 「…100 V 照明器具交換工事である。」

訂正例:100 V 照明器具交換工事 → 6.6 kV 架空送電線工事


問2の不正解肢

2-2. 「…一般住宅の照明配線工事である。」

訂正例:一般住宅の照明配線工事 → 危険場所(Zone1)用防爆照明器具の配線工事

2-3. 「…動力用コンセントの設置工事(200 V)である。」

訂正例:動力用コンセントの設置工事(200 V) → 危険場所(Zone1)用防爆照明器具の配線工事

2-4. 「…電気スタンドのプラグ接続作業である。」

訂正例:電気スタンドのプラグ接続作業 → 危険場所(Zone1)用防爆照明器具の配線工事


問3の不正解肢

3-2. 「…容量150 kVA の変圧器設置工事である。」

訂正例:容量150 kVA の変圧器設置工事 → 容量200 kVA の変圧器設置工事

3-3. 「…容量50 kVA の変圧器設置工事である。」

訂正例:容量50 kVA の変圧器設置工事 → 容量200 kVA の変圧器設置工事

3-4. 「…容量100 kVA の変圧器設置工事である。」

訂正例:容量100 kVA の変圧器設置工事 → 容量200 kVA の変圧器設置工事


問4の不正解肢

4-2. 「…道路照明用架空線の敷設工事である。」

訂正例:道路照明用架空線の敷設工事 → 鉄道用架空電車線路の工事

4-3. 「…住宅用屋内配線工事である。」

訂正例:住宅用屋内配線工事 → 鉄道用架空電車線路の工事

4-4. 「…事業所内分電盤からの動力配線工事である。」

訂正例:事業所内分電盤からの動力配線工事 → 鉄道用架空電車線路の工事


問5の不正解肢

5-2. 「…出力端子電圧400 V の発電機配線工事である。」

訂正例:出力端子電圧400 V の発電機配線工事 → 出力端子電圧6.6 kV の発電機配線工事

5-3. 「…出力端子電圧200 V の発電機配線工事である。」

訂正例:出力端子電圧200 V の発電機配線工事 → 出力端子電圧6.6 kV の発電機配線工事

5-4. 「…出力端子電圧100 V の発電機配線工事である。」

訂正例:出力端子電圧100 V の発電機配線工事 → 出力端子電圧6.6 kV の発電機配線工事


問6の不正解肢

6-2. 「…主開閉装置内部の400 V 配線工事である。」

訂正例:主開閉装置内部の400 V 配線工事 → 主開閉装置内部の6.6 kV 配線工事

6-3. 「…制御盤内部の200 V 配線工事である。」

訂正例:制御盤内部の200 V 配線工事 → 主開閉装置内部の6.6 kV 配線工事

6-4. 「…分電盤から各回路への100 V 配線工事である。」

訂正例:分電盤から各回路への100 V 配線工事 → 主開閉装置内部の6.6 kV 配線工事


問7の不正解肢

7-2. 「…系統連系用太陽光発電装置の400 V 側配線工事である。」

訂正例:400 V 側配線工事 → 6.6 kV 側配線工事

7-3. 「…系統連系用太陽光発電装置の200 V 側配線工事である。」

訂正例:200 V 側配線工事 → 6.6 kV 側配線工事

7-4. 「…系統連系用太陽光発電装置の100 V 側配線工事である。」

訂正例:100 V 側配線工事 → 6.6 kV 側配線工事


問8の不正解肢

8-2. 「…溶接機用400 V 配線工事である。」

訂正例:溶接機用400 V 配線工事 → アーク炉用6.6 kV 配線工事

8-3. 「…IHクッキングヒーター用200 V 配線工事である。」

訂正例:IHクッキングヒーター用200 V 配線工事 → アーク炉用6.6 kV 配線工事

8-4. 「…電気スタンド用100 V 配線工事である。」

訂正例:電気スタンド用100 V 配線工事 → アーク炉用6.6 kV 配線工事


問9の不正解肢

9-2. 「…力率改善用コンデンサバンクの400 V 配線工事である。」

訂正例:400 V 配線工事 → 6.6 kV 配線工事

9-3. 「…力率改善用コンデンサバンクの200 V 配線工事である。」

訂正例:200 V 配線工事 → 6.6 kV 配線工事

9-4. 「…力率改善用コンデンサバンクの100 V 配線工事である。」

訂正例:100 V 配線工事 → 6.6 kV 配線工事


問10の不正解肢

10-2. 「…工事現場に免状を携帯して工事を行う。」

訂正例:工事現場に免状を携帯して工事を行う → 工事現場に免状を携帯せずに工事を行う

10-3. 「…免状を更新期限内に更新する。」

訂正例:免状を更新期限内に更新する → 工事現場に免状を携帯せずに工事を行う

10-4. 「…免状の譲渡・貸与を禁止する。」

訂正例:免状の譲渡・貸与を禁止する → 工事現場に免状を携帯せずに工事を行う


以上、過去問10問と追加の穴埋め10問・誤文訂正30問でした。試験対策にご活用ください。


一般用電気工作物に係る工事の作業で「電気工事士でなければ従事できないもの」に関する過去問

2025-05-17 23:40:18 | 電気工事士

一般用電気工作物に係る工事の作業で「電気工事士でなければ従事できないもの」に関する過去問

問1
電気工事士でなければ従事できない作業はどれか。
A. 電気配線を変更せず、ねじ式ソケットおよびプラグ付きコードを用いてランプを接続する工事

B. 金属管の中に電線を配線し、分岐回路を設ける工事

C. 電気用品安全法に適合した卓上扇風機をコンセントに接続する工事

D. スイッチの装飾プレートを交換する作業

正解:B
解説: 金属管を用いた固定配線工事は「一般用電気工作物に係る工事のうち、電気工事士資格者でなければ従事できない作業」に該当する。その他はプラグ接続や器具交換の範囲。

問2
電気工事士でなければ従事できない作業はどれか。
A. 引込線の取り付け部を変更せずにプラグのみを交換する作業

B. 天井照明器具を取り外し、新しい照明器具を固定し接続する工事

C. 手持ち電動工具に新しいコードを取り付ける作業

D. コンセントプレートの取り外しと取り付け

正解:B
解説: 照明器具の固定および配線結線を伴う工事は電気工事士の専権。プラグ交換やプレート交換は電線工作を伴わない。

問3
電気工事士でなければ従事できない作業はどれか。
A. 電線管を露出配管し、ケーブルを内部に通し接続する工事

B. 電灯用プラグを用いてポータブル蛍光灯をコンセントに接続する作業

C. スマートフォン充電器をコンセントに差し込む作業

D. 家庭用エアコンのプラグコードを分岐タップに接続する作業

正解:A
解説: 電線管を使った配管・ケーブル引き込みと端末結線は資格者作業。プラグ接続のみは含まれない。

問4
電気工事士でなければ従事できない作業はどれか。
A. 分電盤の主遮断器と各回路の結線を行う工事

B. LEDテーブルトップライトをコンセントに接続する作業

C. 誘導灯(非常灯)をプラグ式で接続する作業

D. 電池式非常灯の電池交換作業

正解:A
解説: 分電盤内での端子結線は固定配線工事に該当し、電気工事士の専権である。プラグ式・電池式は含まれない。

問5
電気工事士でなければ従事できない作業はどれか。

A. 金属製屋内配線用モールに電線を挿入し配線を構築する工事

B. 延長コードを使用して冷蔵庫を接続する作業

C. 電気スタンドを持ち運び可能な場所で使うためにプラグを差し替える作業

D. 家庭用LED電球を既存のランプソケットにねじ込む作業

正解:A
解説: モールを用いた固定配線の敷設・結線は電気工事士の専権作業。プラグやソケットへの電球装着は含まれない。

問6
電気工事士でなければ従事できない作業はどれか。

A. 電線接続箱の内部で電線を圧着端子に接続する工事

B. 電気ストーブをコンセントに接続する作業

C. ルームエアコンのコンセントプラグを立ち上げるだけの作業

D. 住宅用テレビアンテナの同軸ケーブルを分配器に接続する作業

正解:A
解説: 接続箱内部での端子結線は固定配線工事。コンセントや分配器へのプラグ・コネクタ接続は含まれない。

問7
電気工事士でなければ従事できない作業はどれか。

A. 漏電遮断器を分電盤内に取り付け接続する工事

B. 屋外装飾用イルミネーションをプラグ付きコードで接続する作業

C. USB充電ポート付き延長コードの交換作業

D. 電子時計を壁コンセントに差し込む作業

正解:A
解説: 分電盤内での遮断器取り付けおよび配線結線は電気工事士の専権。プラグ式・コード交換は対象外。

問8
電気工事士でなければ従事できない作業はどれか。

A. 電動シャッター開閉機の配線工事

B. 電気掃除機をコンセントに接続する作業

C. 電子レンジを卓上コンセントに差し込む作業

D. 電話機を壁のモジュラージャックに差し込む作業

正解:A
解説: 電動機への固定配線と制御線敷設は電気工事士専権。家電のプラグ差込作業は含まれない。

問9
電気工事士でなければ従事できない作業はどれか。

A. 分電盤から各種コンセントおよび照明器具までの屋内配線を行う工事

B. プラグ式蛍光灯器具の電線をコンセントに差し込む作業

C. ホームシアターの電源タップを壁コンセントに接続する作業

D. 蓄電池式懐中電灯の電池交換

正解:A
解説: 固定配線である屋内配線の敷設・結線は資格者作業。プラグ式器具接続・電池交換は含まれない。

問10
電気工事士でなければ従事できない作業はどれか。

A. 住宅用屋内配線の接地極接続を行う工事

B. 電子ブレーカー内の電子部品交換作業

C. スマホ用USBアダプターの端子をプラグに差し込む作業

D. ワイヤレスチャージャーをコンセントに差し込む作業

正解:A
解説: 接地極の敷設・接続は固定配線工事に含まれ、電気工事士の専権である。

追加問題:穴埋め(正解肢×10)
1-1. 【穴埋め】 第二種電気工事士でなければ従事できない作業は、□□□である。

解答例:金属管の中に電線を配線し、分岐回路を設ける工事

2-1. 【穴埋め】 第二種電気工事士でなければ従事できない作業は、□□□である。

解答例:天井照明器具を取り外し、新しい照明器具を固定し接続する工事

3-1. 【穴埋め】 第二種電気工事士でなければ従事できない作業は、□□□である。

解答例:電線管を露出配管し、ケーブルを内部に通し接続する工事

4-1. 【穴埋め】 第二種電気工事士でなければ従事できない作業は、□□□である。

解答例:分電盤の主遮断器と各回路の結線を行う工事

5-1. 【穴埋め】 第二種電気工事士でなければ従事できない作業は、□□□である。

解答例:金属製屋内配線用モールに電線を挿入し配線を構築する工事

6-1. 【穴埋め】 第二種電気工事士でなければ従事できない作業は、□□□である。

解答例:電線接続箱の内部で電線を圧着端子に接続する工事

7-1. 【穴埋め】 第二種電気工事士でなければ従事できない作業は、□□□である。

解答例:漏電遮断器を分電盤内に取り付け接続する工事

8-1. 【穴埋め】 第二種電気工事士でなければ従事できない作業は、□□□である。

解答例:電動シャッター開閉機の配線工事

9-1. 【穴埋め】 第二種電気工事士でなければ従事できない作業は、□□□である。

解答例:分電盤から各種コンセントおよび照明器具までの屋内配線を行う工事

10-1. 【穴埋め】 第二種電気工事士でなければ従事できない作業は、□□□である。

解答例:住宅用屋内配線の接地極接続を行う工事

追加問題:誤文訂正(不正解肢×30)
問1の不正解肢
1-2. 「第二種電気工事士でなければ従事できない作業は、電気配線を変更せず、ねじ式ソケットおよびプラグ付きコードを用いてランプを接続する工事である。」

訂正例:電気配線を変更せず…ランプを接続する工事 → 金属管の中に電線を配線し、分岐回路を設ける工事

1-3. 「第二種電気工事士でなければ従事できない作業は、電気用品安全法に適合した卓上扇風機をコンセントに接続する工事である。」

訂正例:卓上扇風機をコンセントに接続する工事 → 金属管の中に電線を配線し、分岐回路を設ける工事

1-4. 「第二種電気工事士でなければ従事できない作業は、スイッチの装飾プレートを交換する作業である。」

訂正例:スイッチの装飾プレートを交換する作業 → 金属管の中に電線を配線し、分岐回路を設ける工事

問2の不正解肢
2-2. 「…プラグのみを交換する作業である。」

訂正例:プラグのみを交換する作業 → 天井照明器具を取り外し、新しい照明器具を固定し接続する工事

2-3. 「…手持ち電動工具に新しいコードを取り付ける作業である。」

訂正例:手持ち電動工具に新しいコードを取り付ける作業 → 天井照明器具を取り外し、新しい照明器具を固定し接続する工事

2-4. 「…コンセントプレートの取り外しと取り付けである。」

訂正例:コンセントプレートの取り外しと取り付け → 天井照明器具を取り外し、新しい照明器具を固定し接続する工事

問3の不正解肢
3-2. 「…電灯用プラグを用いてポータブル蛍光灯を接続する工事である。」

訂正例:電灯用プラグを用いて…接続する工事 → 電線管を露出配管し、ケーブルを内部に通し接続する工事

3-3. 「…スマートフォン充電器をコンセントに差し込む工事である。」

訂正例:スマートフォン充電器をコンセントに差し込む作業 → 電線管を露出配管し、ケーブルを内部に通し接続する工事

3-4. 「…家庭用エアコンのプラグコードを分岐タップに接続する工事である。」

訂正例:プラグコードを分岐タップに接続する作業 → 電線管を露出配管し、ケーブルを内部に通し接続する工事

問4の不正解肢
4-2. 「…LEDテーブルトップライトをコンセントに接続する工事である。」

訂正例:LEDテーブルトップライトをコンセントに接続する作業 → 分電盤の主遮断器と各回路の結線を行う工事

4-3. 「…誘導灯をプラグ式で接続する工事である。」

訂正例:誘導灯をプラグ式で接続する作業 → 分電盤の主遮断器と各回路の結線を行う工事

4-4. 「…電池式非常灯の電池交換である。」

訂正例:電池式非常灯の電池交換作業 → 分電盤の主遮断器と各回路の結線を行う工事

問5の不正解肢
5-2. 「…延長コードを使用して冷蔵庫を接続する工事である。」

訂正例:延長コードを使用して冷蔵庫を接続する作業 → 金属製屋内配線用モールに電線を挿入し配線を構築する工事

5-3. 「…電気スタンドのプラグ差し替え作業である。」

訂正例:電気スタンドのプラグを差し替える作業 → 金属製屋内配線用モールに電線を挿入し配線を構築する工事

5-4. 「…LED電球をねじ込む作業である。」

訂正例:LED電球をねじ込む作業 → 金属製屋内配線用モールに電線を挿入し配線を構築する工事

問6の不正解肢
6-2. 「…電気ストーブをコンセントに接続する工事である。」

訂正例:電気ストーブをコンセントに接続する作業 → 電線接続箱の内部で電線を圧着端子に接続する工事

6-3. 「…ルームエアコンのプラグ立ち上げ作業である。」

訂正例:ルームエアコンのコンセントプラグ立ち上げ作業 → 電線接続箱の内部で電線を圧着端子に接続する工事

6-4. 「…テレビアンテナケーブルを分配器に接続する作業である。」

訂正例:テレビアンテナケーブルを分配器に接続する作業 → 電線接続箱の内部で電線を圧着端子に接続する工事

問7の不正解肢
7-2. 「…屋外イルミネーションをプラグ付きコードで接続する工事である。」

訂正例:屋外イルミネーションをプラグ付きコードで接続する作業 → 漏電遮断器を分電盤内に取り付け接続する工事

7-3. 「…USB充電ポート付き延長コードの交換作業である。」

訂正例:USB充電ポート付き延長コードの交換作業 → 漏電遮断器を分電盤内に取り付け接続する工事

7-4. 「…電子時計を差し込む作業である。」

訂正例:電子時計を壁コンセントに差し込む作業 → 漏電遮断器を分電盤内に取り付け接続する工事

問8の不正解肢
8-2. 「…電気掃除機をコンセントに接続する工事である。」

訂正例:電気掃除機をコンセントに接続する作業 → 電動シャッター開閉機の配線工事

8-3. 「…電子レンジを差し込む作業である。」

訂正例:電子レンジを卓上コンセントに差し込む作業 → 電動シャッター開閉機の配線工事

8-4. 「…電話機を差し込む作業である。」

訂正例:電話機を壁のモジュラージャックに差し込む作業 → 電動シャッター開閉機の配線工事

問9の不正解肢
9-2. 「…プラグ式蛍光灯の電線差込である。」

訂正例:プラグ式蛍光灯をコンセントに差し込む作業 → 分電盤から各種コンセントおよび照明器具までの屋内配線を行う工事

9-3. 「…ホームシアター電源タップ接続である。」

訂正例:ホームシアターの電源タップを壁コンセントに接続する作業 → 分電盤から各種コンセントおよび照明器具までの屋内配線を行う工事

9-4. 「…懐中電灯の電池交換である。」

訂正例:蓄電池式懐中電灯の電池交換作業 → 分電盤から各種コンセントおよび照明器具までの屋内配線を行う工事

問10の不正解肢
10-2. 「…電子ブレーカー内の電子部品交換である。」

訂正例:電子ブレーカー内の電子部品交換作業 → 住宅用屋内配線の接地極接続を行う工事

10-3. 「…USBアダプター端子差込である。」

訂正例:スマホ用USBアダプターの端子をプラグに差し込む作業 → 住宅用屋内配線の接地極接続を行う工事

10-4. 「…ワイヤレスチャージャー差込である。」

訂正例:ワイヤレスチャージャーをコンセントに差し込む作業 → 住宅用屋内配線の接地極接続を行う工事