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패널 | X0 | Y20 | A 참가자의 버튼과 램프 |
| B패널 | X1 | Y21 | B 참가자의 버튼과 램프 |
| C패널 | X2 | Y22 | C 참가자의 버튼과 램프 |
| D패널 | X3 | Y23 | D 참가자의 버튼과 램프 |
작동 원리 (쉽게 설명)
1단계: 준비
사회자가 X4 버튼을 누르면 모든 램프가 꺼집니다. 이제 새 문제를 낼 준비가 되었어요!
2단계: 경쟁!
문제가 나오면 참가자들이 버튼을 누릅니다.
- 가장 빨리 누른 사람: 램프가 켜집니다! ✅
- 늦게 누른 사람들: 램프가 켜지지 않습니다! ❌
3단계: 다시 준비
사회자가 다시 X4 버튼을 눌러서 모든 램프를 끄고, 다음 문제를 냅니다.
핵심 기능: "우선권 잠금" 🔒
이 프로그램의 가장 중요한 부분은 첫 번째 사람만 인정하는 것입니다.
예시:
- 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: 리셋 회로 (사회자 제어)
💬 Comment: 사회자가 X4 버튼을 누르면 모든 패널의 램프(Y20~Y23)를 동시에 리셋합니다.
회로 1-4: 패널 제어 (우선권 잠금)
💬 Comment: A 패널 버튼(X0)이 눌리고, 다른 패널의 램프(Y21, Y22, Y23)가 모두 꺼져있으면 Y20 램프를 켭니다.
🔒 잠금 조건: /Y21 AND /Y22 AND /Y23 = 다른 패널이 먼저 누르지 않았음
💬 Comment: B 패널 버튼(X1)이 눌리고, 다른 패널의 램프(Y20, Y22, Y23)가 모두 꺼져있으면 Y21 램프를 켭니다.
🔒 잠금 조건: /Y20 AND /Y22 AND /Y23 = 다른 패널이 먼저 누르지 않았음
💬 Comment: C 패널 버튼(X2)이 눌리고, 다른 패널의 램프(Y20, Y21, Y23)가 모두 꺼져있으면 Y22 램프를 켭니다.
🔒 잠금 조건: /Y20 AND /Y21 AND /Y23 = 다른 패널이 먼저 누르지 않았음
💬 Comment: D 패널 버튼(X3)이 눌리고, 다른 패널의 램프(Y20, Y21, Y22)가 모두 꺼져있으면 Y23 램프를 켭니다.
🔒 잠금 조건: /Y20 AND /Y21 AND /Y22 = 다른 패널이 먼저 누르지 않았음
📘 기호 설명
입력 접점 (A접점)
버튼이 눌리면 ON
출력 접점 (B접점)
램프가 꺼져있으면 ON
출력 코일
램프를 켜는 명령
리셋 명령
출력을 강제로 OFF
⚡ 동작 원리 요약
사회자가 X4를 누르면 → 모든 램프가 꺼짐 (초기화)
A가 먼저 X0을 누르면 → Y20이 켜짐, 다른 회로의 /Y20 조건이 FALSE가 되어 B, C, D는 버튼을 눌러도 반응 없음
PLC 스캔 속도(수 ms)로 우선순위 판단 → 공정한 심판 역할 수행
4. PLC용 입력, 출력코딩을 요약해줘.
PLC 입출력 코딩을 체계적으로 요약했습니다!
핵심 포인트:
1️⃣ 입력 5개 - 참가자 버튼 4개 + 사회자 리셋 1개
2️⃣ 출력 4개 - 각 패널의 응답 표시 램프
3️⃣ 핵심 로직 - ANDN 명령어로 B접점 구현하여 우선권 잠금
4️⃣ 실제 명령어 코드 - GX2에서 직접 입력 가능한 형식으로 제공
이 코드는 미쓰비시 Q 시리즈 PLC의 GX Developer 또는 GX Works2에서 바로 입력하여 사용할 수 있습니다! 🎯
장학퀴즈 프로그램 PLC 입출력 코딩 요약
📥 입력 (Input) 할당
| 디바이스 | 명칭 | 용도 | 설명 |
|---|---|---|---|
| X0 | A 패널 버튼 | 참가자 A의 응답 버튼 | A접점, 눌리면 ON |
| X1 | B 패널 버튼 | 참가자 B의 응답 버튼 | A접점, 눌리면 ON |
| X2 | C 패널 버튼 | 참가자 C의 응답 버튼 | A접점, 눌리면 ON |
| X3 | D 패널 버튼 | 참가자 D의 응답 버튼 | A접점, 눌리면 ON |
| X4 | 사회자 리셋 버튼 | 전체 시스템 초기화 | A접점, 눌리면 모든 램프 OFF |
총 입력: 5개
📤 출력 (Output) 할당
| 디바이스 | 명칭 | 용도 | 설명 |
|---|---|---|---|
| Y20 | A 패널 램프 | 참가자 A의 응답 표시등 | A가 최초 응답 시 점등 |
| Y21 | B 패널 램프 | 참가자 B의 응답 표시등 | B가 최초 응답 시 점등 |
| Y22 | C 패널 램프 | 참가자 C의 응답 표시등 | C가 최초 응답 시 점등 |
| Y23 | D 패널 램프 | 참가자 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 점등
📋 명령어 설명
| 명령어 | 기능 | 사용 예 |
|---|---|---|
| LD | Load (접점 읽기) | LD X0 = X0 접점 상태 읽기 |
| ANDN | AND Not (B접점 AND 연결) | ANDN Y20 = Y20이 OFF일 때 조건 성립 |
| OUT | Output (출력 코일) | OUT Y20 = Y20을 ON |
| RST | Reset (출력 리셋) | 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
시스템 초기화
📊 화면 요소 배치
- • 타이틀 배너 표시
- • 4개 패널 영역 생성
- • 사회자 제어 패널
- • 상태 표시 영역
🔗 PLC 연결 설정
- • 입력: X0~X4 매핑
- • 출력: Y20~Y23 매핑
- • 통신 상태 확인
- • 초기값: 모든 램프 OFF
메인 화면 표시
A 패널
대기중
B 패널
대기중
C 패널
대기중
D 패널
대기중
🎙️ 사회자 제어 버튼 (X4 - 리셋)
실시간 모니터링 (스캔 루프)
⏱️ 주기: 100~500ms
📥 입력 감시
X0~X4 상태 읽기
📤 출력 확인
Y20~Y23 상태 읽기
🔔 이벤트 감지
버튼 누름 검출
🖥️ 화면 갱신
램프 상태 업데이트
❓ 조건 판단
버튼이 눌렸는가?
(X0~X4 중 하나라도)
대기 상태 유지
- ✓ 모든 램프 OFF 상태
- ✓ "문제를 기다리는 중..." 표시
- ✓ 계속 모니터링
🔍 버튼 구분
IF X4 == ON (사회자 리셋)
🔄 리셋 동작:
- 1. 모든 램프 OFF (Y20~Y23)
- 2. 화면 초기화
- 3. "READY" 메시지 표시
- 4. 사운드: 삐- (리셋음)
IF X0~X3 중 하나 == ON
🎯 응답 처리:
- 1. 해당 Y 출력 확인
- 2. 우승자 판정
- 3. 화면 갱신
- 4. Step 4로 이동
우승자 표시 화면
🏆 우승자 판정 로직
IF Y20 = ON
A 패널 점등
IF Y21 = ON
B 패널 점등
IF Y22 = ON
C 패널 점등
IF Y23 = ON
D 패널 점등
✨ 화면 효과
- • 우승 패널 램프 깜빡임 (500ms 주기)
- • 대형 텍스트: "🎊 [A/B/C/D] 패널 정답!"
- • 배경색 변경 (승자 컬러)
- • 사운드: 딩동댕~ (정답음)
리셋 대기
사회자가 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 통신연결을 위한 상세한 시놉시스를 작성했습니다!
문서에 포함된 주요 내용:
📌 핵심 구성
- 시스템 구성도 - 전체 연결 아키텍처
- 통신 방식 2가지
- Ethernet (권장) - 빠르고 안정적
- RS-422 - 기존 시스템용
🔧 실무 가이드
- 네트워크 설정 - IP 주소, 서브넷 상세
- 단계별 설정 절차 - GX Works2 & GT Designer3
- 데이터 매핑 테이블 - 입출력 디바이스 완전 매핑
- 통신 프로토콜 - MC Protocol 프레임 구조
🧪 검증 & 문제해결
- 테스트 절차 - 4단계 검증 프로세스
- 트러블슈팅 - 흔한 문제 3가지와 해결법
- 성능 최적화 - 통신 효율 향상 팁
- 최종 체크리스트 - 현장 투입 전 확인사항
이 시놉시스를 따라하면 초보자도 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 패널 램프 │ │
│ └──────────────────────────────┘ │
│ │
└────────────────────────────────────────┘🌐 통신 방식별 설정
Option 1: Ethernet 통신 (권장)
하드웨어 요구사항
- PLC: Q03UDECPU (내장 Ethernet 포트)
- HMI: GT2712-STBA (내장 Ethernet 포트)
- 케이블: CAT5e 이상 이더넷 케이블 (스트레이트)
- 스위치: 불필요 (직접 연결 가능)
네트워크 설정
| 장비 | IP Address | Subnet Mask | Gateway |
|---|---|---|---|
| PLC | 192.168.1.10 | 255.255.255.0 | 192.168.1.1 |
| HMI | 192.168.1.20 | 255.255.255.0 | 192.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 PLCHMI 설정 (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 Rate | 115200 bps |
| Data Bits | 8 bit |
| Parity | None |
| Stop Bits | 1 bit |
| Flow Control | None |
| Station Number | PLC: 0, HMI: 1 |
케이블 배선
PLC (QJ71C24N) HMI (GOT)
┌──────────┐ ┌──────────┐
│ SDA ────┼────────────┼───► RDA │
│ SDB ────┼────────────┼───► RDB │
│ RDA ◄───┼────────────┼──── SDA │
│ RDB ◄───┼────────────┼──── SDB │
│ SG ────┼────────────┼──── SG │
└──────────┘ └──────────┘📊 데이터 통신 구조
1. 읽기 영역 (PLC → HMI)
| 디바이스 | 주소 | 데이터 타입 | 용도 | 갱신 주기 |
|---|---|---|---|---|
| X0 | Input 0 | BIT | A 패널 버튼 상태 | 100ms |
| X1 | Input 1 | BIT | B 패널 버튼 상태 | 100ms |
| X2 | Input 2 | BIT | C 패널 버튼 상태 | 100ms |
| X3 | Input 3 | BIT | D 패널 버튼 상태 | 100ms |
| X4 | Input 4 | BIT | 리셋 버튼 상태 | 100ms |
| Y20 | Output 20 | BIT | A 패널 램프 상태 | 100ms |
| Y21 | Output 21 | BIT | B 패널 램프 상태 | 100ms |
| Y22 | Output 22 | BIT | C 패널 램프 상태 | 100ms |
| Y23 | Output 23 | BIT | D 패널 램프 상태 | 100ms |
2. 쓰기 영역 (HMI → PLC)
| 디바이스 | 주소 | 데이터 타입 | 용도 | 비고 |
|---|---|---|---|---|
| M0 | Internal Relay 0 | BIT | HMI 리셋 명령 | 옵션 (터치 버튼) |
| M1 | Internal Relay 1 | BIT | HMI 통신 확인 | 하트비트 |
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 → ParameterStep 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 & SaveStep 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) 테스트
# PC에서 PLC로 핑 테스트
ping 192.168.1.10
# 정상 응답 예시:
Reply from 192.168.1.10: bytes=32 time<1ms TTL=642. GX Works2 Online 연결 테스트
1. Online → Connect
2. Connection Test 성공 확인
3. PLC Diagnostics → CPU Status 확인
- Run Mode
- No Error3. GT Designer3 Connection Test
1. Common Settings → Connection Device
2. Test Connection 버튼 클릭
3. 결과 확인:
✓ Connection: OK
✓ Device Type: Q03UDECPU
✓ Communication Time: < 50ms4. 실시간 모니터링 테스트
[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, 일반 데이터: 500ms3. 통신 에러 처리
[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 화면 표시 정상
📞 기술 지원
미쓰비시 전기 고객지원
- 전화: 1588-0701
- 웹사이트: www.mitsubishielectric.co.kr
- 메뉴얼: FA 사이트 → 다운로드 센터
문서 참조
- GX Works2 Operating Manual
- GT Designer3 Reference Manual
- Q Series Programming Manual
- MELSEC Communication Protocol Reference
아래 예시의 래더도를 첨부한 형식의 인포그래픽을 제시 해줘
첨부하신 실제 래더 다이어그램을 반영하여 인포그래픽을 업데이트했습니다!
주요 변경사항:
🔄 실제 회로 구조 반영
- 3개 패널 (패널 1, 2, 3)로 구성
- 자기유지 방식 사용 (M1, M2, M3 릴레이)
- X0 리셋 (사회자 버튼)
- 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 리셋
사회자 초기화 버튼
💬 동작 설명:
- 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가 되어 다른 패널 동작 불가
💬 동작 설명:
- Line 7: PB2(X2) 누름 + M1/M3/X0 모두 OFF → M2 ON (자기유지 시작)
- 자기유지: M2가 ON되면 X2를 떼어도 M2 계속 유지
- Line 13: M2가 ON이면 Y22(녹색 램프) 점등
- 우선권 잠금: M2가 먼저 ON되면 다른 패널 동작 불가
💬 동작 설명:
- 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
⚡ 동작 시퀀스
초기 상태
M1, M2, M3 모두 OFF | Y21, Y22, Y23 모두 OFF
패널 1 먼저 버튼 누름 (t=0.001초)
X1 ON → M1 ON (자기유지) → Y21 ON ✅
이후 M1 릴레이가 자신을 유지하므로 X1을 떼어도 M1 유지
패널 2, 3 버튼 눌러도 무시 (t=0.002초~)
X2·/M1 = FALSE (M1이 이미 ON이므로) → M2 동작 불가 ❌
X3·/M1 = FALSE (M1이 이미 ON이므로) → M3 동작 불가 ❌
사회자 리셋 (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

댓글 없음:
댓글 쓰기