2025년 10월 22일 수요일

AI기반(클로드) PLC 프로그램 만들기 // Project - 장학퀴즈 프로그램

 AI 클로드에게: 프롬프트 제시

https://claude.ai/chat/0f92b3c0-2621-4df3-bb11-668e1e23d0b9

너는 PLC 프로그래밍 전문가야. PLC는 GX2 - Q 시리즈 모델에 기반하여 아래 프로젝트를 수행해줘.

1. Project - 장학퀴즈 프로그램

> 사회자 

X4(J사) 버튼을 이용하여 모든 패널의 램프를 끌 수 있다


> 패널

A 패널: XO 버튼 보유, 버튼을 누르면 Y20번 램프 On

B 패널: X1 버튼 보유, 버튼을 누르면 Y21번 램프 On

C 패널 : X2 버튼 보유, 버튼을 누르면 Y22번 램프 On

D 패널 : X3 버튼 보유, 버튼을 누르면 Y23번 램프 On

패널들이 동시에 버튼을 눌렀을 때 가장 빨리 누른 한 명의 램프만 ON!

2. 먼저, 프로그램에 대한 갸요를 ELI5 수준으로 원 페이지의 유인물을 작성해줘.

장학퀴즈 프로그램 이해하기 🎯

프로그램이 하는 일

여러분이 TV에서 보는 퀴즈쇼를 생각해보세요! 4명의 참가자(A, B, C, D)가 있고, 답을 알면 재빨리 버튼을 누릅니다. 가장 먼저 버튼을 누른 사람의 불만 켜지고, 나머지 사람들의 불은 켜지지 않습니다.

등장인물

👨‍🏫 사회자

  • X4 버튼: 모든 램프를 끄는 "리셋" 버튼
  • 새로운 문제를 내기 전에 이 버튼을 눌러서 모든 불을 끕니다

👥 참가자 패널 (4명)

패널버튼램프설명
A패널X0Y20A 참가자의 버튼과 램프
B패널X1Y21B 참가자의 버튼과 램프
C패널X2Y22C 참가자의 버튼과 램프
D패널X3Y23D 참가자의 버튼과 램프

작동 원리 (쉽게 설명)

1단계: 준비

사회자가 X4 버튼을 누르면 모든 램프가 꺼집니다. 이제 새 문제를 낼 준비가 되었어요!

2단계: 경쟁!

문제가 나오면 참가자들이 버튼을 누릅니다.

  • 가장 빨리 누른 사람: 램프가 켜집니다! ✅
  • 늦게 누른 사람들: 램프가 켜지지 않습니다! ❌

3단계: 다시 준비

사회자가 다시 X4 버튼을 눌러서 모든 램프를 끄고, 다음 문제를 냅니다.

핵심 기능: "우선권 잠금" 🔒

예시:
- A가 버튼을 누름 (0.001초) → Y20 램프 켜짐 ✅
- B가 버튼을 누름 (0.002초) → 이미 A가 눌렀으므로 무시됨 ❌
- C가 버튼을 누름 (0.003초) → 이미 A가 눌렀으므로 무시됨 ❌
- D가 버튼을 누름 (0.004초) → 이미 A가 눌렀으므로 무시됨 ❌

이 프로그램의 가장 중요한 부분은 첫 번째 사람만 인정하는 것입니다.

예시:
- A가 버튼을 누름 (0.001초) → Y20 램프 켜짐 ✅
- B가 버튼을 누름 (0.002초) → 이미 A가 눌렀으므로 무시됨 ❌
- C가 버튼을 누름 (0.003초) → 이미 A가 눌렀으므로 무시됨 ❌
- D가 버튼을 누름 (0.004초) → 이미 A가 눌렀으므로 무시됨 ❌

PLC가 필요한 이유

일반 전기 회로로는 여러 사람이 동시에 버튼을 누르면 여러 불이 켜질 수 있습니다. 하지만 PLC(Programmable Logic Controller)는 아주 빠른 속도로 순서를 판단해서 정확히 첫 번째 사람만 인정할 수 있습니다!


💡 기억하세요: PLC는 공정하고 정확한 심판입니다!


3. 래더도를 인포그래픽 형식(스테이트먼트 및 코멘트 삽입)으로 작성해줘.

장학퀴즈 프로그램의 래더 다이어그램을 인포그래픽 형식으로 작성했습니다!

주요 특징:

5개의 Statement로 구성

  • Statement 0: 리셋 회로 (최우선)
  • Statement 1-4: 각 패널별 제어 회로

우선권 잠금 로직

  • 각 패널은 다른 패널의 램프가 모두 꺼져있을 때만 작동
  • B접점(/Y)을 사용하여 다른 출력이 ON이면 자신은 작동 불가

상세한 코멘트

  • 각 회로의 동작 원리 설명
  • 잠금 조건의 논리 명시
  • 컬러 코딩으로 구분

이 프로그램은 PLC의 빠른 스캔 속도(보통 수 밀리초)를 활용하여 가장 먼저 버튼을 누른 패널을 정확하게 판단합니다!


장학퀴즈 프로그램 래더 다이어그램

GX2 - Q 시리즈 | 우선권 잠금 방식

회로 0: 리셋 회로 (사회자 제어)

Statement 0우선순위: 최상
X4────┐
├─RST Y20
├─RST Y21
├─RST Y22
└─RST Y23

💬 Comment: 사회자가 X4 버튼을 누르면 모든 패널의 램프(Y20~Y23)를 동시에 리셋합니다.

회로 1-4: 패널 제어 (우선권 잠금)

Statement 1A 패널
X0────/Y21────/Y22────/Y23────(Y20)

💬 Comment: A 패널 버튼(X0)이 눌리고, 다른 패널의 램프(Y21, Y22, Y23)가 모두 꺼져있으면 Y20 램프를 켭니다.

🔒 잠금 조건: /Y21 AND /Y22 AND /Y23 = 다른 패널이 먼저 누르지 않았음

Statement 2B 패널
X1────/Y20────/Y22────/Y23────(Y21)

💬 Comment: B 패널 버튼(X1)이 눌리고, 다른 패널의 램프(Y20, Y22, Y23)가 모두 꺼져있으면 Y21 램프를 켭니다.

🔒 잠금 조건: /Y20 AND /Y22 AND /Y23 = 다른 패널이 먼저 누르지 않았음

Statement 3C 패널
X2────/Y20────/Y21────/Y23────(Y22)

💬 Comment: C 패널 버튼(X2)이 눌리고, 다른 패널의 램프(Y20, Y21, Y23)가 모두 꺼져있으면 Y22 램프를 켭니다.

🔒 잠금 조건: /Y20 AND /Y21 AND /Y23 = 다른 패널이 먼저 누르지 않았음

Statement 4D 패널
X3────/Y20────/Y21────/Y22────(Y23)

💬 Comment: D 패널 버튼(X3)이 눌리고, 다른 패널의 램프(Y20, Y21, Y22)가 모두 꺼져있으면 Y23 램프를 켭니다.

🔒 잠금 조건: /Y20 AND /Y21 AND /Y22 = 다른 패널이 먼저 누르지 않았음

📘 기호 설명

X0-X4

입력 접점 (A접점)

버튼이 눌리면 ON

/Y20-/Y23

출력 접점 (B접점)

램프가 꺼져있으면 ON

Y20-Y23

출력 코일

램프를 켜는 명령

RST

리셋 명령

출력을 강제로 OFF

⚡ 동작 원리 요약

1

사회자가 X4를 누르면 → 모든 램프가 꺼짐 (초기화)

2

A가 먼저 X0을 누르면 → Y20이 켜짐, 다른 회로의 /Y20 조건이 FALSE가 되어 B, C, D는 버튼을 눌러도 반응 없음

3

PLC 스캔 속도(수 ms)로 우선순위 판단 → 공정한 심판 역할 수행


4. PLC용 입력, 출력코딩을 요약해줘.

PLC 입출력 코딩을 체계적으로 요약했습니다!

핵심 포인트:

1️⃣ 입력 5개 - 참가자 버튼 4개 + 사회자 리셋 1개

2️⃣ 출력 4개 - 각 패널의 응답 표시 램프

3️⃣ 핵심 로직 - ANDN 명령어로 B접점 구현하여 우선권 잠금

4️⃣ 실제 명령어 코드 - GX2에서 직접 입력 가능한 형식으로 제공

이 코드는 미쓰비시 Q 시리즈 PLC의 GX Developer 또는 GX Works2에서 바로 입력하여 사용할 수 있습니다! 🎯

장학퀴즈 프로그램 PLC 입출력 코딩 요약

📥 입력 (Input) 할당

디바이스명칭용도설명
X0A 패널 버튼참가자 A의 응답 버튼A접점, 눌리면 ON
X1B 패널 버튼참가자 B의 응답 버튼A접점, 눌리면 ON
X2C 패널 버튼참가자 C의 응답 버튼A접점, 눌리면 ON
X3D 패널 버튼참가자 D의 응답 버튼A접점, 눌리면 ON
X4사회자 리셋 버튼전체 시스템 초기화A접점, 눌리면 모든 램프 OFF

총 입력: 5개


📤 출력 (Output) 할당

디바이스명칭용도설명
Y20A 패널 램프참가자 A의 응답 표시등A가 최초 응답 시 점등
Y21B 패널 램프참가자 B의 응답 표시등B가 최초 응답 시 점등
Y22C 패널 램프참가자 C의 응답 표시등C가 최초 응답 시 점등
Y23D 패널 램프참가자 D의 응답 표시등D가 최초 응답 시 점등

총 출력: 4개


💻 래더 프로그램 코드

🔴 Statement 0: 리셋 회로

LD    X4              // 사회자 리셋 버튼
RST   Y20             // A 패널 램프 리셋
RST   Y21             // B 패널 램프 리셋
RST   Y22             // C 패널 램프 리셋
RST   Y23             // D 패널 램프 리셋

기능: 사회자가 X4를 누르면 모든 출력 램프를 강제 OFF


🔵 Statement 1: A 패널 회로

LD    X0              // A 패널 버튼
ANDN  Y21             // B 램프가 꺼져있고
ANDN  Y22             // C 램프가 꺼져있고
ANDN  Y23             // D 램프가 꺼져있으면
OUT   Y20             // A 램프 켜기

기능: A가 버튼을 누르고 다른 패널의 램프가 모두 OFF이면 Y20 점등


🟢 Statement 2: B 패널 회로

LD    X1              // B 패널 버튼
ANDN  Y20             // A 램프가 꺼져있고
ANDN  Y22             // C 램프가 꺼져있고
ANDN  Y23             // D 램프가 꺼져있으면
OUT   Y21             // B 램프 켜기

기능: B가 버튼을 누르고 다른 패널의 램프가 모두 OFF이면 Y21 점등


🟡 Statement 3: C 패널 회로

LD    X2              // C 패널 버튼
ANDN  Y20             // A 램프가 꺼져있고
ANDN  Y21             // B 램프가 꺼져있고
ANDN  Y23             // D 램프가 꺼져있으면
OUT   Y22             // C 램프 켜기

기능: C가 버튼을 누르고 다른 패널의 램프가 모두 OFF이면 Y22 점등


🟠 Statement 4: D 패널 회로

LD    X3              // D 패널 버튼
ANDN  Y20             // A 램프가 꺼져있고
ANDN  Y21             // B 램프가 꺼져있고
ANDN  Y22             // C 램프가 꺼져있으면
OUT   Y23             // D 램프 켜기

기능: D가 버튼을 누르고 다른 패널의 램프가 모두 OFF이면 Y23 점등


📋 명령어 설명

명령어기능사용 예
LDLoad (접점 읽기)LD X0 = X0 접점 상태 읽기
ANDNAND Not (B접점 AND 연결)ANDN Y20 = Y20이 OFF일 때 조건 성립
OUTOutput (출력 코일)OUT Y20 = Y20을 ON
RSTReset (출력 리셋)RST Y20 = Y20을 강제 OFF

🔒 우선권 잠금 원리

조건식 예시 (A 패널):
X0 · /Y21 · /Y22 · /Y23 = Y20

해석:
- X0 = A 버튼이 눌림 (TRUE)
- /Y21 = B 램프가 꺼져있음 (TRUE)
- /Y22 = C 램프가 꺼져있음 (TRUE)
- /Y23 = D 램프가 꺼져있음 (TRUE)
→ 모든 조건 만족 시 Y20 점등

만약 Y21이 이미 켜져있다면:
- /Y21 = FALSE → 전체 조건 FALSE → Y20 점등 불가

⚡ 동작 시퀀스

[초기 상태]
X4 누름 → 모든 Y 출력 OFF

[경쟁 상황]
t=0.000초: 모든 램프 OFF 상태
t=0.001초: A가 X0 누름 → Y20 ON
t=0.002초: B가 X1 누름 → /Y20=FALSE → Y21 점등 불가
t=0.003초: C가 X2 누름 → /Y20=FALSE → Y22 점등 불가
t=0.004초: D가 X3 누름 → /Y20=FALSE → Y23 점등 불가

결과: A 패널만 점등 ✅

[다음 라운드]
X4 누름 → 모든 Y 출력 OFF → 새 문제 시작

🎯 프로그램 특징

간결성: 총 5개 Statement로 구현
공정성: 하드웨어적 우선권 잠금으로 정확한 판정
안정성: RST 명령으로 확실한 초기화
확장성: 패널 추가 시 동일 로직으로 확장 가능


📊 리소스 사용량

  • 입력 디바이스: 5개 (X0~X4)
  • 출력 디바이스: 4개 (Y20~Y23)
  • 프로그램 스텝: 약 25 스텝
  • 스캔 타임: < 1ms (일반적인 Q 시리즈 기준)

메모리 효율: 매우 높음 ⭐⭐⭐⭐⭐

5. HMI 작성용 플로우차트를 제시해줘.


장학퀴즈 HMI 작성용 플로우차트를 상세하게 작성했습니다!

플로우차트의 핵심 구조:

1️⃣ 초기화 → 2️⃣ 메인 화면 → 3️⃣ 실시간 모니터링 → 4️⃣ 조건 판단

  • NO 경로: 대기 상태 유지 → Step 3 복귀
  • YES 경로: 버튼 구분 (X4 리셋 / X0-X3 응답)

5️⃣ 우승자 표시 → 6️⃣ 리셋 대기 → Step 3 복귀

추가 제공 사항: ✅ 화면 설계 사양 (크기, 색상, 폰트) ✅ PLC 태그 바인딩 예시 ✅ 애니메이션 설정 가이드 ✅ 구현 시 주의사항

이 플로우차트를 기반으로 GT Designer3 (미쓰비시) 또는 다른 HMI 소프트웨어에서 직접 화면을 구현할 수 있습니다! 🎯

장학퀴즈 HMI 설계 플로우차트

Human Machine Interface Design Flow

시작 (START)
1

시스템 초기화

📊 화면 요소 배치

  • • 타이틀 배너 표시
  • • 4개 패널 영역 생성
  • • 사회자 제어 패널
  • • 상태 표시 영역

🔗 PLC 연결 설정

  • • 입력: X0~X4 매핑
  • • 출력: Y20~Y23 매핑
  • • 통신 상태 확인
  • • 초기값: 모든 램프 OFF
2

메인 화면 표시

A 패널

Y20

대기중

B 패널

Y21

대기중

C 패널

Y22

대기중

D 패널

Y23

대기중

🎙️ 사회자 제어 버튼 (X4 - 리셋)

3

실시간 모니터링 (스캔 루프)

⏱️ 주기: 100~500ms

📥 입력 감시

X0~X4 상태 읽기

📤 출력 확인

Y20~Y23 상태 읽기

🔔 이벤트 감지

버튼 누름 검출

🖥️ 화면 갱신

램프 상태 업데이트

❓ 조건 판단

버튼이 눌렸는가?

(X0~X4 중 하나라도)

NO (눌리지 않음)

대기 상태 유지

  • ✓ 모든 램프 OFF 상태
  • ✓ "문제를 기다리는 중..." 표시
  • ✓ 계속 모니터링
→ Step 3으로 복귀
YES (눌림)

🔍 버튼 구분

IF X4 == ON (사회자 리셋)

🔄 리셋 동작:

  • 1. 모든 램프 OFF (Y20~Y23)
  • 2. 화면 초기화
  • 3. "READY" 메시지 표시
  • 4. 사운드: 삐- (리셋음)

IF X0~X3 중 하나 == ON

🎯 응답 처리:

  • 1. 해당 Y 출력 확인
  • 2. 우승자 판정
  • 3. 화면 갱신
  • 4. Step 4로 이동
4

우승자 표시 화면

🏆 우승자 판정 로직

IF Y20 = ON

A 패널 점등

IF Y21 = ON

B 패널 점등

IF Y22 = ON

C 패널 점등

IF Y23 = ON

D 패널 점등

✨ 화면 효과

  • • 우승 패널 램프 깜빡임 (500ms 주기)
  • • 대형 텍스트: "🎊 [A/B/C/D] 패널 정답!"
  • • 배경색 변경 (승자 컬러)
  • • 사운드: 딩동댕~ (정답음)
5

리셋 대기

사회자가 X4(리셋)을 누를 때까지 대기

  • 우승자 화면 유지
  • 다른 버튼(X0~X3) 입력 무시
  • "리셋을 기다리는 중..." 메시지 표시

Step 3으로 복귀

새로운 문제 대기 상태로 전환

HMI 화면 설계 사양

📺 시각적 요소

패널 표시 (각 4개)

  • • 크기: 200x200 픽셀
  • • 램프 표시등: 원형, 지름 100px
  • • OFF 색상: 회색 (#CCCCCC)
  • • ON 색상: 각 패널별 (빨강/파랑/초록/노랑)
  • • 패널명: 굵은 글꼴, 24pt

사회자 제어 버튼

  • • 크기: 전체 폭 x 80px
  • • 배경색: 빨간색 (#FF0000)
  • • 텍스트: "전체 리셋 (X4)" - 흰색, 32pt
  • • 터치 가능 영역

🔗 데이터 바인딩

PLC 태그 매핑

Y20 → Panel_A_Lamp.Visible

Y21 → Panel_B_Lamp.Visible

Y22 → Panel_C_Lamp.Visible

Y23 → Panel_D_Lamp.Visible

X4 → Reset_Button.Pressed

애니메이션 설정

  • • 깜빡임: 500ms ON / 500ms OFF
  • • 페이드 효과: 200ms
  • • 사운드 트리거: Y 변화 감지

⚠️ 구현 시 주의사항

  • • HMI 스캔 주기는 PLC보다 느리므로 100~200ms 권장
  • • 통신 에러 발생 시 "통신 오류" 화면 표시
  • • 터치 버튼은 PLC X4와 병렬로 구성 가능 (HMI에서도 리셋 가능)
  • • 승자 판정 로직은 PLC에서 처리, HMI는 표시만 담당
  • • 색맹 사용자를 위해 패널명 텍스트도 함께 표시


6. 통신연결을 위한 시놉시스를 제시해줘.

https://claude.ai/chat/0f92b3c0-2621-4df3-bb11-668e1e23d0b9

PLC-HMI 통신연결을 위한 상세한 시놉시스를 작성했습니다!

문서에 포함된 주요 내용:

📌 핵심 구성

  1. 시스템 구성도 - 전체 연결 아키텍처
  2. 통신 방식 2가지
    • Ethernet (권장) - 빠르고 안정적
    • RS-422 - 기존 시스템용

🔧 실무 가이드

  1. 네트워크 설정 - IP 주소, 서브넷 상세
  2. 단계별 설정 절차 - GX Works2 & GT Designer3
  3. 데이터 매핑 테이블 - 입출력 디바이스 완전 매핑
  4. 통신 프로토콜 - MC Protocol 프레임 구조

🧪 검증 & 문제해결

  1. 테스트 절차 - 4단계 검증 프로세스
  2. 트러블슈팅 - 흔한 문제 3가지와 해결법
  3. 성능 최적화 - 통신 효율 향상 팁
  4. 최종 체크리스트 - 현장 투입 전 확인사항

이 시놉시스를 따라하면 초보자도 PLC-HMI 통신을 성공적으로 구축할 수 있습니다! 🎯

장학퀴즈 시스템 통신연결 시놉시스

📋 프로젝트 개요

항목내용
프로젝트명장학퀴즈 프로그램
PLC 모델미쓰비시 Q 시리즈 (예: Q03UDECPU)
HMI 모델미쓰비시 GOT (예: GT2712-STBA)
통신 방식Ethernet (권장) 또는 RS-422
프로토콜MELSEC Protocol (MC Protocol)
용도4개 패널 우선권 퀴즈 시스템

🔌 시스템 구성도

┌─────────────────────────────────────────────────────────────┐
│                     장학퀴즈 시스템                          │
└─────────────────────────────────────────────────────────────┘

    ┌──────────────┐         통신 케이블          ┌──────────────┐
    │              │    (Ethernet / RS-422)      │              │
    │   PLC        │◄──────────────────────────►│     HMI      │
    │  Q Series    │                             │   GOT 2000   │
    │              │                             │              │
    └──────┬───────┘                             └──────────────┘
           │                                            │
           │ I/O 연결                                   │ 표시
           │                                            │
    ┌──────▼────────────────────────────────┐          │
    │                                        │          │
    │  입력부 (Input Module)                 │          │
    │  ┌──────────────────────────────┐    │          │
    │  │ X0:  A 패널 버튼             │    │          │
    │  │ X1:  B 패널 버튼             │    │          │
    │  │ X2:  C 패널 버튼             │    │          │
    │  │ X3:  D 패널 버튼             │    │          │
    │  │ X4:  사회자 리셋 버튼         │    │          │
    │  └──────────────────────────────┘    │          │
    │                                        │          │
    │  출력부 (Output Module)                │          │
    │  ┌──────────────────────────────┐    │          │
    │  │ Y20: A 패널 램프             │────┼──────────┘
    │  │ Y21: B 패널 램프             │    │
    │  │ Y22: C 패널 램프             │    │
    │  │ Y23: D 패널 램프             │    │
    │  └──────────────────────────────┘    │
    │                                        │
    └────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│                     장학퀴즈 시스템                          │
└─────────────────────────────────────────────────────────────┘

    ┌──────────────┐         통신 케이블          ┌──────────────┐
    │              │    (Ethernet / RS-422)      │              │
    │   PLC        │◄──────────────────────────►│     HMI      │
    │  Q Series    │                             │   GOT 2000   │
    │              │                             │              │
    └──────┬───────┘                             └──────────────┘
           │                                            │
           │ I/O 연결                                   │ 표시
           │                                            │
    ┌──────▼────────────────────────────────┐          │
    │                                        │          │
    │  입력부 (Input Module)                 │          │
    │  ┌──────────────────────────────┐    │          │
    │  │ X0:  A 패널 버튼             │    │          │
    │  │ X1:  B 패널 버튼             │    │          │
    │  │ X2:  C 패널 버튼             │    │          │
    │  │ X3:  D 패널 버튼             │    │          │
    │  │ X4:  사회자 리셋 버튼         │    │          │
    │  └──────────────────────────────┘    │          │
    │                                        │          │
    │  출력부 (Output Module)                │          │
    │  ┌──────────────────────────────┐    │          │
    │  │ Y20: A 패널 램프             │────┼──────────┘
    │  │ Y21: B 패널 램프             │    │
    │  │ Y22: C 패널 램프             │    │
    │  │ Y23: D 패널 램프             │    │
    │  └──────────────────────────────┘    │
    │                                        │
    └────────────────────────────────────────┘

🌐 통신 방식별 설정

Option 1: Ethernet 통신 (권장)

하드웨어 요구사항

  • PLC: Q03UDECPU (내장 Ethernet 포트)
  • HMI: GT2712-STBA (내장 Ethernet 포트)
  • 케이블: CAT5e 이상 이더넷 케이블 (스트레이트)
  • 스위치: 불필요 (직접 연결 가능)

네트워크 설정

장비IP AddressSubnet MaskGateway
PLC192.168.1.10255.255.255.0192.168.1.1
HMI192.168.1.20255.255.255.0192.168.1.1

PLC 설정 (GX Works2)

1. Navigation Window → Parameter → Network Parameter
2. Ethernet Port Setting
   - IP Address: 192.168.1.10
   - Subnet Mask: 255.255.255.0
   - Open Setting: Protocol = "SLMP"
   - Port Number: 5007 (기본값)
3. Write to PLC

HMI 설정 (GT Designer3)

1. Common Settings → Connection Device/PLC Settings
2. Add Connection Device
   - Device Type: Q Series
   - Communication Type: Ethernet
   - Protocol: MC Protocol
   - PLC IP Address: 192.168.1.10
   - Port Number: 5007
   - Station Number: 0
3. Test Connection → OK 확인

Option 2: RS-422 시리얼 통신

하드웨어 요구사항

  • PLC: RS-422 통신 모듈 (예: QJ71C24N)
  • HMI: 내장 RS-422 포트
  • 케이블: RS-422 전용 케이블 (차폐형)

통신 파라미터

항목설정값
Baud Rate115200 bps
Data Bits8 bit
ParityNone
Stop Bits1 bit
Flow ControlNone
Station NumberPLC: 0, HMI: 1

케이블 배선

PLC (QJ71C24N)          HMI (GOT)
┌──────────┐            ┌──────────┐
│ SDA  ────┼────────────┼───► RDA  │
│ SDB  ────┼────────────┼───► RDB  │
│ RDA  ◄───┼────────────┼──── SDA  │
│ RDB  ◄───┼────────────┼──── SDB  │
│ SG   ────┼────────────┼──── SG   │
└──────────┘            └──────────┘

📊 데이터 통신 구조

1. 읽기 영역 (PLC → HMI)

디바이스주소데이터 타입용도갱신 주기
X0Input 0BITA 패널 버튼 상태100ms
X1Input 1BITB 패널 버튼 상태100ms
X2Input 2BITC 패널 버튼 상태100ms
X3Input 3BITD 패널 버튼 상태100ms
X4Input 4BIT리셋 버튼 상태100ms
Y20Output 20BITA 패널 램프 상태100ms
Y21Output 21BITB 패널 램프 상태100ms
Y22Output 22BITC 패널 램프 상태100ms
Y23Output 23BITD 패널 램프 상태100ms

2. 쓰기 영역 (HMI → PLC)

디바이스주소데이터 타입용도비고
M0Internal Relay 0BITHMI 리셋 명령옵션 (터치 버튼)
M1Internal Relay 1BITHMI 통신 확인하트비트

3. 통신 프레임 구조 (MC Protocol)

읽기 요청 예시 (Y20~Y23 읽기)

┌────────┬────────┬────────┬────────┬────────┬────────┐
│ Header │ Network│ Station│ Command│ Device │ Length │
│  5000  │   00   │   00   │  0401  │  20Y   │  0004  │
└────────┴────────┴────────┴────────┴────────┴────────┘

응답 프레임

┌────────┬────────┬────────┬────────┐
│ Header │Response│  Data  │  Data  │
│  D000  │  0000  │  Y20~Y23 상태   │
└────────┴────────┴────────┴────────┘

🔧 통신 설정 단계별 가이드

Step 1: PLC 네트워크 파라미터 설정

[GX Works2]
1. Project → New Project
2. Series: Q, Type: Q03UDECPU
3. Parameter → Network Parameter
4. Built-in Ethernet Port 설정
   ├─ IP Address: 192.168.1.10
   ├─ Subnet Mask: 255.255.255.0
   ├─ Protocol: MC Protocol
   └─ Port: 5007
5. Online → Write to PLC → Parameter

Step 2: HMI 연결 설정

[GT Designer3]
1. Project → Common Settings → Connection Device/PLC
2. Add New Connection
3. Device Settings
   ├─ Manufacturer: Mitsubishi
   ├─ Series: Q Series
   ├─ Connection: Ethernet
   ├─ IP: 192.168.1.10
   ├─ Port: 5007
   └─ Protocol: MC Protocol
4. Test Connection
5. Apply & Save

Step 3: 디바이스 매핑

[GT Designer3 - Screen Design]
1. Lamp Object 생성 (4개)
   Panel A Lamp:
   ├─ Device: Y20
   ├─ ON Color: Red
   └─ OFF Color: Gray

   Panel B Lamp:
   ├─ Device: Y21
   ├─ ON Color: Blue
   └─ OFF Color: Gray

   Panel C Lamp:
   ├─ Device: Y22
   ├─ ON Color: Green
   └─ OFF Color: Gray

   Panel D Lamp:
   ├─ Device: Y23
   ├─ ON Color: Yellow
   └─ OFF Color: Gray

2. Button Object (리셋)
   ├─ Device: M0 (Momentary)
   ├─ Action: Bit ON while touched
   └─ Label: "전체 리셋"

Step 4: PLC 프로그램에 HMI 연동 추가

[래더 프로그램 추가]
Statement 5: HMI 리셋 버튼 처리

LD    M0              // HMI 리셋 버튼
OR    X4              // 물리적 리셋 버튼
RST   Y20             // A 패널 램프 리셋
RST   Y21             // B 패널 램프 리셋
RST   Y22             // C 패널 램프 리셋
RST   Y23             // D 패널 램프 리셋

🧪 통신 테스트 절차

1. 핑(Ping) 테스트

bash
# PC에서 PLC로 핑 테스트
ping 192.168.1.10

# 정상 응답 예시:
Reply from 192.168.1.10: bytes=32 time<1ms TTL=64

2. GX Works2 Online 연결 테스트

1. Online → Connect
2. Connection Test 성공 확인
3. PLC Diagnostics → CPU Status 확인
   - Run Mode
   - No Error

3. GT Designer3 Connection Test

1. Common Settings → Connection Device
2. Test Connection 버튼 클릭
3. 결과 확인:
   ✓ Connection: OK
   ✓ Device Type: Q03UDECPU
   ✓ Communication Time: < 50ms

4. 실시간 모니터링 테스트

[GX Works2 - Device Monitor]
1. Diagnostics → Device Test
2. Monitor Device: X0~X4, Y20~Y23
3. 버튼 조작 시 값 변화 확인
4. HMI에서 램프 표시 확인

⚠️ 트러블슈팅 가이드

문제 1: HMI가 PLC에 연결되지 않음

원인 및 해결:

□ IP 주소 충돌
  └─ 해결: 각 장비의 IP가 고유한지 확인

□ 서브넷 마스크 불일치
  └─ 해결: 동일한 서브넷으로 설정 (255.255.255.0)

□ 케이블 불량
  └─ 해결: 케이블 교체 또는 커넥터 재접속

□ 방화벽 차단 (PC 연결 시)
  └─ 해결: 포트 5007 허용

□ MC Protocol 설정 오류
  └─ 해결: PLC와 HMI의 프로토콜 일치 확인

문제 2: 통신 지연 또는 타임아웃

원인 및 해결:

□ 스캔 주기가 너무 짧음
  └─ 해결: HMI 스캔 주기를 100ms 이상으로 설정

□ 네트워크 트래픽 과다
  └─ 해결: 불필요한 디바이스 읽기 제거

□ PLC CPU 부하 과다
  └─ 해결: 프로그램 최적화

□ 케이블 길이 초과 (RS-422)
  └─ 해결: 최대 50m 이내 유지

문제 3: 데이터가 갱신되지 않음

원인 및 해결:

□ 디바이스 주소 오류
  └─ 해결: Y20~Y23 주소 재확인

□ HMI 스캔 정지
  └─ 해결: GT Designer3에서 Scan Setting 확인

□ PLC RUN 모드 아님
  └─ 해결: PLC를 RUN 모드로 전환

□ 통신 설정 불일치
  └─ 해결: Baud rate, Protocol 재확인

📈 통신 성능 최적화

1. 데이터 블록 읽기

비효율: 개별 읽기 (5번 통신)
X0, X1, X2, X3, X4

효율: 블록 읽기 (1번 통신)
X0~X4 (5비트 한번에)

2. 스캔 주기 최적화

추천 설정:
├─ PLC 스캔: 10~20ms (자동)
├─ HMI 스캔: 100~200ms
└─ 중요 데이터: 100ms, 일반 데이터: 500ms

3. 통신 에러 처리

[PLC 프로그램]
Statement 6: 통신 하트비트

LD    SM412           // 1초 클럭
OUT   M1              // HMI로 전송

[HMI 화면]
IF M1 = 토글 → 통신 정상
IF M1 = 고정 → 통신 에러 표시

📝 최종 체크리스트

하드웨어

  • PLC 전원 ON, RUN 모드 확인
  • HMI 전원 ON, 부팅 완료
  • 이더넷 케이블 연결 확인 (LED 점등)
  • 입력 버튼 5개 정상 작동
  • 출력 램프 4개 정상 작동

소프트웨어

  • GX Works2 프로젝트 PLC에 다운로드
  • GT Designer3 프로젝트 HMI에 다운로드
  • PLC-HMI 통신 연결 성공
  • 디바이스 매핑 완료
  • 실시간 모니터링 확인

기능 테스트

  • 사회자 리셋 버튼 (X4) 동작
  • A 패널 버튼-램프 연동
  • B 패널 버튼-램프 연동
  • C 패널 버튼-램프 연동
  • D 패널 버튼-램프 연동
  • 우선권 잠금 동작
  • HMI 화면 표시 정상

📞 기술 지원

미쓰비시 전기 고객지원

문서 참조

  • GX Works2 Operating Manual
  • GT Designer3 Reference Manual
  • Q Series Programming Manual
  • MELSEC Communication Protocol Reference


아래 예시의 래더도를 첨부한 형식의 인포그래픽을 제시 해줘



첨부하신 실제 래더 다이어그램을 반영하여 인포그래픽을 업데이트했습니다!

주요 변경사항:

🔄 실제 회로 구조 반영

  1. 3개 패널 (패널 1, 2, 3)로 구성
  2. 자기유지 방식 사용 (M1, M2, M3 릴레이)
  3. X0 리셋 (사회자 버튼)
  4. Y21, Y22, Y23 출력 (적색, 녹색, 황색 램프)

📋 실제 라인별 상세 설명

  • Line 0-6: 패널 1 회로 (X1 → M1 → Y21)
  • Line 7-13: 패널 2 회로 (X2 → M2 → Y22)
  • Line 14-20: 패널 3 회로 (X3 → M3 → Y23)

🎯 핵심 기능

  • 자기유지 회로: 버튼을 떼어도 릴레이 상태 유지
  • OR 분기: X 입력과 M 자기접점의 병렬 연결
  • 우선권 잠금: /M 접점으로 다른 패널 차단
  • X0 리셋: /X0 조건으로 모든 자기유지 해제

첨부하신 실제 GX Works2 화면의 로직을 정확히 반영했습니다! 🎯

장학퀴즈 프로그램 래더 다이어그램

GX2 - Q 시리즈 | 자기유지(Self-Hold) + 우선권 잠금 방식

프로그램 구조 개요

3개 회로

각 패널별 독립 제어

자기유지 방식

M 릴레이로 우선권 잠금

X0 리셋

사회자 초기화 버튼

실제 래더 다이어그램
Statement 0 (Line 0-6)패널 1 (적색)
Line 0M1 자기유지 설정
X1──┬──/M2────/M3────/X0────(M1)
└──M1────/X0
Line 6출력 (적색 램프)
────M1────────────────────────────────────(Y21)

💬 동작 설명:

  • Line 0: PB1(X1) 누름 + M2/M3/X0 모두 OFF → M1 ON (자기유지 시작)
  • 자기유지: M1이 ON되면 X1을 떼어도 M1 계속 유지 (X0으로만 리셋 가능)
  • Line 6: M1이 ON이면 Y21(적색 램프) 점등
  • 우선권 잠금: M1이 먼저 ON되면 /M2, /M3 조건이 FALSE가 되어 다른 패널 동작 불가
Statement 1 (Line 7-13)패널 2 (녹색)
Line 7M2 자기유지 설정
X2──┬──/M1────/M3────/X0────(M2)
└──M2────/X0
Line 13출력 (녹색 램프)
────M2────────────────────────────────────(Y22)

💬 동작 설명:

  • Line 7: PB2(X2) 누름 + M1/M3/X0 모두 OFF → M2 ON (자기유지 시작)
  • 자기유지: M2가 ON되면 X2를 떼어도 M2 계속 유지
  • Line 13: M2가 ON이면 Y22(녹색 램프) 점등
  • 우선권 잠금: M2가 먼저 ON되면 다른 패널 동작 불가
Statement 2 (Line 14-20)패널 3 (황색)
Line 14M3 자기유지 설정
X3──┬──/M1────/M2────/X0────(M3)
└──M3────/X0
Line 20출력 (황색 램프)
────M3────────────────────────────────────(Y23)

💬 동작 설명:

  • Line 14: PB3(X3) 누름 + M1/M2/X0 모두 OFF → M3 ON (자기유지 시작)
  • 자기유지: M3가 ON되면 X3를 떼어도 M3 계속 유지
  • Line 20: M3가 ON이면 Y23(황색 램프) 점등
  • 우선권 잠금: M3가 먼저 ON되면 다른 패널 동작 불가

🔄 디바이스 매핑 비교

구분패널 1 (적색)패널 2 (녹색)패널 3 (황색)
입력 버튼X1 (PB1)X2 (PB2)X3 (PB3)
자기유지 릴레이M1 (R1)M2 (R2)M3 (R3)
출력 램프Y21 (적색램프)Y22 (녹색램프)Y23 (황색램프)
잠금 조건/M2 AND /M3/M1 AND /M3/M1 AND /M2
리셋 조건X0 (PB0) - 공통 리셋

자기유지 회로 원리

🔄 자기유지란?

입력 버튼을 떼어도 출력이 계속 유지되는 회로

X1 누름 → M1 ON

X1 뗌 → M1 유지 (자기 접점으로)

X0 누름 → M1 OFF

🔒 우선권 잠금 원리

먼저 동작한 패널이 다른 패널을 차단

M1 ON → /M1 = FALSE

패널2: X2·/M1·/M3 = FALSE

패널3: X3·/M1·/M2 = FALSE

→ 다른 패널 동작 불가 ✅

💻 명령어 코드 (GX Works2)

패널 1 회로

LD    X1
ANDN  M2
ANDN  M3
ANDN  X0
OR    M1
ANDN  X0
OUT   M1

LD    M1
OUT   Y21

패널 2 회로

LD    X2
ANDN  M1
ANDN  M3
ANDN  X0
OR    M2
ANDN  X0
OUT   M2

LD    M2
OUT   Y22

패널 3 회로

LD    X3
ANDN  M1
ANDN  M2
ANDN  X0
OR    M3
ANDN  X0
OUT   M3

LD    M3
OUT   Y23

⚡ 동작 시퀀스

1

초기 상태

M1, M2, M3 모두 OFF | Y21, Y22, Y23 모두 OFF

2

패널 1 먼저 버튼 누름 (t=0.001초)

X1 ON → M1 ON (자기유지) → Y21 ON ✅

이후 M1 릴레이가 자신을 유지하므로 X1을 떼어도 M1 유지

3

패널 2, 3 버튼 눌러도 무시 (t=0.002초~)

X2·/M1 = FALSE (M1이 이미 ON이므로) → M2 동작 불가 ❌

X3·/M1 = FALSE (M1이 이미 ON이므로) → M3 동작 불가 ❌

4

사회자 리셋 (X0 누름)

/X0 = FALSE → M1, M2, M3 모두 OFF → Y21, Y22, Y23 모두 OFF

새로운 문제를 위한 준비 완료

===> 원페이지로 래더도를 제공해줘

QR코드 : https://claude.ai/chat/0f92b3c0-2621-4df3-bb11-668e1e23d0b9







<svg viewBox="0 0 1200 1600" xmlns="http://www.w3.org/2000/svg"> <!-- Background --> <rect width="1200" height="1600" fill="#f8fafc"/> <!-- Title Section --> <rect x="20" y="20" width="1160" height="100" fill="#4f46e5" rx="10"/> <text x="600" y="60" font-size="32" font-weight="bold" fill="white" text-anchor="middle">장학퀴즈 프로그램 래더 다이어그램</text> <text x="600" y="95" font-size="18" fill="#e0e7ff" text-anchor="middle">GX2 - Q Series | 자기유지 + 우선권 잠금 방식</text> <!-- Circuit 1: Panel 1 (Red) --> <g id="circuit1"> <!-- Header --> <rect x="40" y="140" width="1120" height="50" fill="#eef2ff" stroke="#4f46e5" stroke-width="3" rx="8"/> <text x="60" y="172" font-size="20" font-weight="bold" fill="#4f46e5">회로 0 (Line 0-6): 패널 1 - 적색램프</text> <rect x="1000" y="150" width="140" height="30" fill="#ef4444" rx="5"/> <text x="1070" y="172" font-size="16" font-weight="bold" fill="white" text-anchor="middle">패널 1</text> <!-- Line 0: M1 Self-Hold --> <rect x="60" y="210" width="1100" height="110" fill="white" stroke="#c7d2fe" stroke-width="2" rx="5"/> <text x="80" y="235" font-size="14" fill="#6366f1" font-weight="bold">Line 0: M1 자기유지 설정</text> <!-- Ladder Logic Line 0 --> <line x1="100" y1="260" x2="140" y2="260" stroke="#1e293b" stroke-width="3"/> <rect x="140" y="245" width="60" height="30" fill="white" stroke="#3b82f6" stroke-width="2" rx="3"/> <text x="170" y="265" font-size="16" font-weight="bold" fill="#3b82f6" text-anchor="middle">X1</text> <line x1="200" y1="260" x2="230" y2="260" stroke="#1e293b" stroke-width="3"/> <!-- Branch point --> <circle cx="230" cy="260" r="4" fill="#1e293b"/> <line x1="230" y1="260" x2="270" y2="260" stroke="#1e293b" stroke-width="3"/> <rect x="270" y="245" width="60" height="30" fill="white" stroke="#ef4444" stroke-width="2" rx="3"/> <text x="300" y="265" font-size="16" font-weight="bold" fill="#ef4444" text-anchor="middle">/M2</text> <line x1="330" y1="260" x2="370" y2="260" stroke="#1e293b" stroke-width="3"/> <rect x="370" y="245" width="60" height="30" fill="white" stroke="#ef4444" stroke-width="2" rx="3"/> <text x="400" y="265" font-size="16" font-weight="bold" fill="#ef4444" text-anchor="middle">/M3</text> <line x1="430" y1="260" x2="470" y2="260" stroke="#1e293b" stroke-width="3"/> <rect x="470" y="245" width="60" height="30" fill="white" stroke="#ef4444" stroke-width="2" rx="3"/> <text x="500" y="265" font-size="16" font-weight="bold" fill="#ef4444" text-anchor="middle">/X0</text> <line x1="530" y1="260" x2="900" y2="260" stroke="#1e293b" stroke-width="3"/> <!-- Output Coil M1 --> <circle cx="920" cy="260" r="20" fill="white" stroke="#10b981" stroke-width="3"/> <line x1="910" y1="260" x2="930" y2="260" stroke="#10b981" stroke-width="2"/> <text x="960" y="265" font-size="16" font-weight="bold" fill="#10b981">M1</text> <!-- Self-hold branch --> <line x1="230" y1="260" x2="230" y2="290" stroke="#1e293b" stroke-width="3"/> <line x1="230" y1="290" x2="270" y2="290" stroke="#1e293b" stroke-width="3"/> <rect x="270" y="275" width="60" height="30" fill="white" stroke="#3b82f6" stroke-width="2" rx="3"/> <text x="300" y="295" font-size="16" font-weight="bold" fill="#3b82f6" text-anchor="middle">M1</text> <line x1="330" y1="290" x2="370" y2="290" stroke="#1e293b" stroke-width="3"/> <rect x="370" y="275" width="60" height="30" fill="white" stroke="#ef4444" stroke-width="2" rx="3"/> <text x="400" y="295" font-size="16" font-weight="bold" fill="#ef4444" text-anchor="middle">/X0</text> <line x1="430" y1="290" x2="530" y2="290" stroke="#1e293b" stroke-width="3"/> <line x1="530" y1="290" x2="530" y2="260" stroke="#1e293b" stroke-width="3"/> <!-- Line 6: Output Y21 --> <rect x="60" y="340" width="1100" height="70" fill="white" stroke="#c7d2fe" stroke-width="2" rx="5"/> <text x="80" y="365" font-size="14" fill="#6366f1" font-weight="bold">Line 6: Y21 출력 (적색램프)</text> <line x1="100" y1="385" x2="140" y2="385" stroke="#1e293b" stroke-width="3"/> <rect x="140" y="370" width="60" height="30" fill="white" stroke="#3b82f6" stroke-width="2" rx="3"/> <text x="170" y="390" font-size="16" font-weight="bold" fill="#3b82f6" text-anchor="middle">M1</text> <line x1="200" y1="385" x2="900" y2="385" stroke="#1e293b" stroke-width="3"/> <circle cx="920" cy="385" r="20" fill="white" stroke="#10b981" stroke-width="3"/> <line x1="910" y1="385" x2="930" y2="385" stroke="#10b981" stroke-width="2"/> <text x="960" y="390" font-size="16" font-weight="bold" fill="#10b981">Y21</text> <text x="1020" y="390" font-size="14" fill="#ef4444">적색램프</text> </g> <!-- Circuit 2: Panel 2 (Green) --> <g id="circuit2"> <!-- Header --> <rect x="40" y="440" width="1120" height="50" fill="#f3e8ff" stroke="#9333ea" stroke-width="3" rx="8"/> <text x="60" y="472" font-size="20" font-weight="bold" fill="#9333ea">회로 1 (Line 7-13): 패널 2 - 녹색램프</text> <rect x="1000" y="450" width="140" height="30" fill="#10b981" rx="5"/> <text x="1070" y="472" font-size="16" font-weight="bold" fill="white" text-anchor="middle">패널 2</text> <!-- Line 7: M2 Self-Hold --> <rect x="60" y="510" width="1100" height="110" fill="white" stroke="#ddd6fe" stroke-width="2" rx="5"/> <text x="80" y="535" font-size="14" fill="#9333ea" font-weight="bold">Line 7: M2 자기유지 설정</text> <line x1="100" y1="560" x2="140" y2="560" stroke="#1e293b" stroke-width="3"/> <rect x="140" y="545" width="60" height="30" fill="white" stroke="#3b82f6" stroke-width="2" rx="3"/> <text x="170" y="565" font-size="16" font-weight="bold" fill="#3b82f6" text-anchor="middle">X2</text> <line x1="200" y1="560" x2="230" y2="560" stroke="#1e293b" stroke-width="3"/> <circle cx="230" cy="560" r="4" fill="#1e293b"/> <line x1="230" y1="560" x2="270" y2="560" stroke="#1e293b" stroke-width="3"/> <rect x="270" y="545" width="60" height="30" fill="white" stroke="#ef4444" stroke-width="2" rx="3"/> <text x="300" y="565" font-size="16" font-weight="bold" fill="#ef4444" text-anchor="middle">/M1</text> <line x1="330" y1="560" x2="370" y2="560" stroke="#1e293b" stroke-width="3"/> <rect x="370" y="545" width="60" height="30" fill="white" stroke="#ef4444" stroke-width="2" rx="3"/> <text x="400" y="565" font-size="16" font-weight="bold" fill="#ef4444" text-anchor="middle">/M3</text> <line x1="430" y1="560" x2="470" y2="560" stroke="#1e293b" stroke-width="3"/> <rect x="470" y="545" width="60" height="30" fill="white" stroke="#ef4444" stroke-width="2" rx="3"/> <text x="500" y="565" font-size="16" font-weight="bold" fill="#ef4444" text-anchor="middle">/X0</text> <line x1="530" y1="560" x2="900" y2="560" stroke="#1e293b" stroke-width="3"/> <circle cx="920" cy="560" r="20" fill="white" stroke="#10b981" stroke-width="3"/> <line x1="910" y1="560" x2="930" y2="560" stroke="#10b981" stroke-width="2"/> <text x="960" y="565" font-size="16" font-weight="bold" fill="#10b981">M2</text> <line x1="230" y1="560" x2="230" y2="590" stroke="#1e293b" stroke-width="3"/> <line x1="230" y1="590" x2="270" y2="590" stroke="#1e293b" stroke-width="3"/> <rect x="270" y="575" width="60" height="30" fill="white" stroke="#3b82f6" stroke-width="2" rx="3"/> <text x="300" y="595" font-size="16" font-weight="bold" fill="#3b82f6" text-anchor="middle">M2</text> <line x1="330" y1="590" x2="370" y2="590" stroke="#1e293b" stroke-width="3"/> <rect x="370" y="575" width="60" height="30" fill="white" stroke="#ef4444" stroke-width="2" rx="3"/> <text x="400" y="595" font-size="16" font-weight="bold" fill="#ef4444" text-anchor="middle">/X0</text> <line x1="430" y1="590" x2="530" y2="590" stroke="#1e293b" stroke-width="3"/> <line x1="530" y1="590" x2="530" y2="560" stroke="#1e293b" stroke-width="3"/> <!-- Line 13: Output Y22 --> <rect x="60" y="640" width="1100" height="70" fill="white" stroke="#ddd6fe" stroke-width="2" rx="5"/> <text x="80" y="665" font-size="14" fill="#9333ea" font-weight="bold">Line 13: Y22 출력 (녹색램프)</text> <line x1="100" y1="685" x2="140" y2="685" stroke="#1e293b" stroke-width="3"/> <rect x="140" y="670" width="60" height="30" fill="white" stroke="#3b82f6" stroke-width="2" rx="3"/> <text x="170" y="690" font-size="16" font-weight="bold" fill="#3b82f6" text-anchor="middle">M2</text> <line x1="200" y1="685" x2="900" y2="685" stroke="#1e293b" stroke-width="3"/> <circle cx="920" cy="685" r="20" fill="white" stroke="#10b981" stroke-width="3"/> <line x1="910" y1="685" x2="930" y2="685" stroke="#10b981" stroke-width="2"/> <text x="960" y="690" font-size="16" font-weight="bold" fill="#10b981">Y22</text> <text x="1020" y="690" font-size="14" fill="#10b981">녹색램프</text> </g> <!-- Circuit 3: Panel 3 (Yellow) --> <g id="circuit3"> <!-- Header --> <rect x="40" y="740" width="1120" height="50" fill="#fef3c7" stroke="#f59e0b" stroke-width="3" rx="8"/> <text x="60" y="772" font-size="20" font-weight="bold" fill="#f59e0b">회로 2 (Line 14-20): 패널 3 - 황색램프</text> <rect x="1000" y="750" width="140" height="30" fill="#fbbf24" rx="5"/> <text x="1070" y="772" font-size="16" font-weight="bold" fill="white" text-anchor="middle">패널 3</text> <!-- Line 14: M3 Self-Hold --> <rect x="60" y="810" width="1100" height="110" fill="white" stroke="#fde68a" stroke-width="2" rx="5"/> <text x="80" y="835" font-size="14" fill="#f59e0b" font-weight="bold">Line 14: M3 자기유지 설정</text> <line x1="100" y1="860" x2="140" y2="860" stroke="#1e293b" stroke-width="3"/> <rect x="140" y="845" width="60" height="30" fill="white" stroke="#3b82f6" stroke-width="2" rx="3"/> <text x="170" y="865" font-size="16" font-weight="bold" fill="#3b82f6" text-anchor="middle">X3</text> <line x1="200" y1="860" x2="230" y2="860" stroke="#1e293b" stroke-width="3"/> <circle cx="230" cy="860" r="4" fill="#1e293b"/> <line x1="230" y1="860" x2="270" y2="860" stroke="#1e293b" stroke-width="3"/> <rect x="270" y="845" width="60" height="30" fill="white" stroke="#ef4444" stroke-width="2" rx="3"/> <text x="300" y="865" font-size="16" font-weight="bold" fill="#ef4444" text-anchor="middle">/M1</text> <line x1="330" y1="860" x2="370" y2="860" stroke="#1e293b" stroke-width="3"/> <rect x="370" y="845" width="60" height="30" fill="white" stroke="#ef4444" stroke-width="2" rx="3"/> <text x="400" y="865" font-size="16" font-weight="bold" fill="#ef4444" text-anchor="middle">/M2</text> <line x1="430" y1="860" x2="470" y2="860" stroke="#1e293b" stroke-width="3"/> <rect x="470" y="845" width="60" height="30" fill="white" stroke="#ef4444" stroke-width="2" rx="3"/> <text x="500" y="865" font-size="16" font-weight="bold" fill="#ef4444" text-anchor="middle">/X0</text> <line x1="530" y1="860" x2="900" y2="860" stroke="#1e293b" stroke-width="3"/> <circle cx="920" cy="860" r="20" fill="white" stroke="#10b981" stroke-width="3"/> <line x1="910" y1="860" x2="930" y2="860" stroke="#10b981" stroke-width="2"/> <text x="960" y="865" font-size="16" font-weight="bold" fill="#10b981">M3</text> <line x1="230" y1="860" x2="230" y2="890" stroke="#1e293b" stroke-width="3"/> <line x1="230" y1="890" x2="270" y2="890" stroke="#1e293b" stroke-width="3"/> <rect x="270" y="875" width="60" height="30" fill="white" stroke="#3b82f6" stroke-width="2" rx="3"/> <text x="300" y="895" font-size="16" font-weight="bold" fill="#3b82f6" text-anchor="middle">M3</text> <line x1="330" y1="890" x2="370" y2="890" stroke="#1e293b" stroke-width="3"/> <rect x="370" y="875" width="60" height="30" fill="white" stroke="#ef4444" stroke-width="2" rx="3"/> <text x="400" y="895" font-size="16" font-weight="bold" fill="#ef4444" text-anchor="middle">/X0</text> <line x1="430" y1="890" x2="530" y2="890" stroke="#1e293b" stroke-width="3"/> <line x1="530" y1="890" x2="530" y2="860" stroke="#1e293b" stroke-width="3"/> <!-- Line 20: Output Y23 --> <rect x="60" y="940" width="1100" height="70" fill="white" stroke="#fde68a" stroke-width="2" rx="5"/> <text x="80" y="965" font-size="14" fill="#f59e0b" font-weight="bold">Line 20: Y23 출력 (황색램프)</text> <line x1="100" y1="985" x2="140" y2="985" stroke="#1e293b" stroke-width="3"/> <rect x="140" y="970" width="60" height="30" fill="white" stroke="#3b82f6" stroke-width="2" rx="3"/> <text x="170" y="990" font-size="16" font-weight="bold" fill="#3b82f6" text-anchor="middle">M3</text> <line x1="200" y1="985" x2="900" y2="985" stroke="#1e293b" stroke-width="3"/> <circle cx="920" cy="985" r="20" fill="white" stroke="#10b981" stroke-width="3"/> <line x1="910" y1="985" x2="930" y2="985" stroke="#10b981" stroke-width="2"/> <text x="960" y="990" font-size="16" font-weight="bold" fill="#10b981">Y23</text> <text x="1020" y="990" font-size="14" fill="#f59e0b">황색램프</text> </g> <!-- Legend Section --> <rect x="40" y="1040" width="1120" height="260" fill="#f1f5f9" stroke="#64748b" stroke-width="2" rx="8"/> <text x="60" y="1070" font-size="22" font-weight="bold" fill="#1e293b">📘 기호 및 동작 설명</text> <!-- Symbols --> <g id="symbols"> <!-- Input Contact --> <rect x="80" y="1090" width="250" height="50" fill="white" stroke="#3b82f6" stroke-width="2" rx="5"/> <rect x="100" y="1105" width="40" height="20" fill="white" stroke="#3b82f6" stroke-width="2" rx="3"/> <text x="120" y="1120" font-size="14" font-weight="bold" fill="#3b82f6" text-anchor="middle">Xi</text> <text x="230" y="1120" font-size="14" fill="#1e293b">입력 접점 (A접점)</text> <!-- B Contact --> <rect x="370" y="1090" width="250" height="50" fill="white" stroke="#ef4444" stroke-width="2" rx="5"/> <rect x="390" y="1105" width="40" height="20" fill="white" stroke="#ef4444" stroke-width="2" rx="3"/> <text x="410" y="1120" font-size="14" font-weight="bold" fill="#ef4444" text-anchor="middle">/Mi</text> <text x="510" y="1120" font-size="14" fill="#1e293b">B접점 (부정 논리)</text> <!-- Output Coil --> <rect x="660" y="1090" width="250" height="50" fill="white" stroke="#10b981" stroke-width="2" rx="5"/> <circle cx="700" cy="1115" r="12" fill="white" stroke="#10b981" stroke-width="2"/> <text x="820" y="1120" font-size="14" fill="#1e293b">출력 코일</text> <!-- Reset --> <rect x="950" y="1090" width="190" height="50" fill="white" stroke="#ef4444" stroke-width="2" rx="5"/> <text x="970" y="1120" font-size="14" font-weight="bold" fill="#ef4444">X0 (PB0)</text> <text x="1090" y="1120" font-size="14" fill="#1e293b">리셋</text> </g> <!-- Operation Principle --> <g id="operation"> <rect x="80" y="1160" width="530" height="120" fill="white" stroke="#6366f1" stroke-width="2" rx="5"/> <text x="100" y="1185" font-size="16" font-weight="bold" fill="#6366f1">⚡ 자기유지 원리</text> <text x="100" y="1210" font-size="13" fill="#1e293b">1. X1 누름 → M1 ON (조건: /M2·/M3·/X0)</text> <text x="100" y="1235" font-size="13" fill="#1e293b">2. M1 ON → M1 자기접점 활성화</text> <text x="100" y="1260" font-size="13" fill="#1e293b">3. X1 뗌 → M1 자기접점으로 계속 유지</text> <rect x="630" y="1160" width="530" height="120" fill="white" stroke="#ef4444" stroke-width="2" rx="5"/> <text x="650" y="1185" font-size="16" font-weight="bold" fill="#ef4444">🔒 우선권 잠금</text> <text x="650" y="1210" font-size="13" fill="#1e293b">1. M1 먼저 ON → /M1 = FALSE</text> <text x="650" y="1235" font-size="13" fill="#1e293b">2. 패널2: X2·/M1 = FALSE → M2 동작 불가</text> <text x="650" y="1260" font-size="13" fill="#1e293b">3. 패널3: X3·/M1 = FALSE → M3 동작 불가</text> </g> <!-- Device Mapping --> <rect x="40" y="1320" width="1120" height="260" fill="white" stroke="#64748b" stroke-width="2" rx="8"/> <text x="60" y="1350" font-size="22" font-weight="bold" fill="#1e293b">📊 디바이스 할당표</text> <!-- Table Header --> <rect x="80" y="1370" width="200" height="35" fill="#4f46e5" rx="3"/> <text x="180" y="1393" font-size="15" font-weight="bold" fill="white" text-anchor="middle">구분</text> <rect x="280" y="1370" width="250" height="35" fill="#ef4444" rx="3"/> <text x="405" y="1393" font-size="15" font-weight="bold" fill="white" text-anchor="middle">패널 1 (적색)</text> <rect x="530" y="1370" width="250" height="35" fill="#10b981" rx="3"/> <text x="655" y="1393" font-size="15" font-weight="bold" fill="white" text-anchor="middle">패널 2 (녹색)</text> <rect x="780" y="1370" width="250" height="35" fill="#fbbf24" rx="3"/> <text x="905" y="1393" font-size="15" font-weight="bold" fill="white" text-anchor="middle">패널 3 (황색)</text> <!-- Table Rows --> <rect x="80" y="1405" width="200" height="35" fill="#f1f5f9"/> <text x="180" y="1428" font-size="14" fill="#1e293b" text-anchor="middle">입력 버튼</text> <rect x="280" y="1405" width="250" height="35" fill="#fef2f2"/> <text x="405" y="1428" font-size="14" fill="#1e293b" text-anchor="middle">X1 (PB1)</text> <rect x="530" y="1405" width="250" height="35" fill="#f0fdf4"/> <text x="655" y="1428" font-size="14" fill="#1e293b" text-anchor="middle">X2 (PB2)</text> <rect x="780" y="1405" width="250" height="35" fill="#fefce8"/> <text x="905" y="1428" font-size="14" fill="#1e293b" text-anchor="middle">X3 (PB3)</text> <rect x="80" y="1440" width="200" height="35" fill="#f1f5f9"/> <text x="180" y="1463" font-size="14" fill="#1e293b" text-anchor="middle">자기유지 릴레이</text> <rect x="280" y="1440" width="250" height="35" fill="#fef2f2"/> <text x="405" y="1463" font-size="14" fill="#1e293b" text-anchor="middle">M1 (R1)</text> <rect x="530" y="1440" width="250" height="35" fill="#f0fdf4"/> <text x="655" y="1463" font-size="14" fill="#1e293b" text-anchor="middle">M2 (R2)</text> <rect x="780" y="1440" width="250" height="35" fill="#fefce8"/> <text x="905" y="1463" font-size="14" fill="#1e293b" text-anchor="middle">M3 (R3)</text> <rect x="80" y="1475" width="200" height="35" fill="#f1f5f9"/> <text x="180" y="1498" font-size="14" fill="#1e293b" text-anchor="middle">출력 램프</text> <rect x="280" y="1475" width="250" height="35" fill="#fef2f2"/> <text x="405" y="1498" font-size="14" fill="#1e293b" text-anchor="middle">Y21 (적색)</text> <rect x="530" y="1475" width="250" height="35" fill="#f0fdf4"/> <text x="655" y="1498" font-size="14" fill="#1e293b" text-anchor="middle">Y22 (녹색)</text> <rect x="780" y="1475" width="250" height="35" fill="#fefce8"/> <text x="905" y="1498" font-size="14" fill="#1e293b" text-anchor="middle">Y23 (황색)</text> <rect x







댓글 없음:

댓글 쓰기