PLC 프로파일링 — 테스트 키트(건조로 #2)
PLC 프로파일링 은 IO 주소 목록이 없는 PLC 를 엣지가 읽기 전용으로 훑어 실제로 쓰는 주소를 찾고, 이름을 붙여 태그로 등록하게 해 주는 기능입니다. 이 쪽의 테스트 키트는 실제 설비 없이 그 흐름을 처음부터 끝까지 시험해 보는 묶음입니다 — 가상의 «건조로 #2» 를 흉내 내는 Modbus TCP 시뮬레이터와, 그 값에 맞춘 HMI 화면 사진 · PLC 코멘트 파일입니다.
출시 전 기능입니다
PLC 프로파일링은 아직 정식 출시 전이라, 이 기능이 들어간 시험 빌드에서만 보입니다. 화면 머리줄의 칩 아이콘으로 열고, AI 가 설정돼 있을 때만 보입니다. 기능 소개는 엣지 제안서 의 «⑥ 주소 목록이 없어도 붙입니다» 쪽을 보세요.
키트 내려받기
| 파일 | 무엇 | 내려받기 |
|---|---|---|
| HMI 화면 사진 | 가상 HMI «건조로 #2 운전 화면»(1280×800). 설정값 · 생산 수량 · 램프가 시뮬레이터 값과 맞습니다 | hmi-dryer2.png |
| PLC 코멘트 | PLC 코멘트 내보내기 예시. Modicon 주소(4xxxx · 3xxxx · 0xxxx · 1xxxx, 1부터 셈), UTF-8, 23줄 | dryer2-comments.csv |
| 시뮬레이터 | 위 둘과 값이 맞는 Modbus TCP 시뮬레이터. Python 3 표준 라이브러리만 쓰고, 읽기 전용입니다 | dryer2_sim.py |
사진과 코멘트는 선택 첨부입니다. 없어도 스캔 결과만으로 기본 이름을 짓습니다 — 첨부하면 AI 가 그 근거로 태그명 · 설명 · 단위를 제안합니다.

시뮬레이터 실행
python3 dryer2_sim.py 5020
- 포트를 빼면
5020입니다. 켜지면dryer2 simulator listening on :5020이 찍힙니다. - 엣지와 같은 호스트에서 돌리면 엣지에 넣을 IP 는
127.0.0.1입니다(엣지 컨테이너는 host 네트워크를 씁니다). 다른 PC 에서 돌리면 그 PC 의 IP 를 넣습니다. - 다른 PC 라면 그 PC 의 방화벽에서
5020/tcp를 열어야 할 수 있습니다. - Unit ID 는 무엇을 넣어도 받습니다.
시뮬레이터가 내는 값
주소는 Modbus 프로토콜 주소(0부터)와 Modicon 표기(1부터)를 함께 적었습니다. 코멘트 CSV 는 Modicon 표기입니다.
| 영역 · 주소 | Modicon | 뜻 | 값 |
|---|---|---|---|
| holding 0 | 40001 | 건조로 현재 온도 (×0.1 ℃) | 99.0~102.0 사이에서 움직임 |
| holding 1 | 40002 | 배기 댐퍼 현재 개도 (×0.1 %) | 움직임 |
| holding 2 | 40003 | 배치 번호 | 35 (고정) |
| holding 3 | 40004 | 생산 카운터 | 3초마다 +1 |
| holding 4 | 40005 | 누적 가동 시간 (h) | 111 (고정) |
| holding 5 | 40006 | 레시피 번호 | 640 (고정) |
| holding 10 | 40011 | 건조로 설정 온도 (×0.1 ℃) | 1008 → 100.8 ℃ |
| holding 11 | 40012 | 배기 댐퍼 설정 (×0.1 %) | 1009 → 100.9 % |
| holding 12 | 40013 | 공급 압력 설정 (×0.01 bar) | 1015 → 10.15 bar |
| holding 13 | 40014 | 컨베이어 속도 설정 (×0.01 m/min) | 1016 → 10.16 m/min |
| holding 14 | 40015 | 상한 경보 설정 (×0.1 ℃) | 1020 → 102.0 ℃ |
| holding 20–21 | 40021–40022 | 공급 압력 현재값, FLOAT32 상위 워드 먼저 | 10.0~10.3 bar 사이에서 움직임 |
| input 0 | 30001 | 생산 수량 표시 (EA) | 999 |
| input 1 | 30002 | 가동 시간 표시 (h) | 111 |
| coil 0~3 | 00001~00004 | 운전 · 정지 · 자동 · 이상 램프 | 1 · 0 · 1 · 0 |
| discrete 0 | 10001 | 도어 닫힘 | 1 |
| discrete 1 | 10002 | 비상 정지 눌림 | 0 |
| discrete 2 | 10003 | 버너 화염 감지 | 5초마다 깜박임 |
- 네 영역 모두 주소 0~1999 를 내고, 위 표에 없는 주소는 0 입니다.
- 2000 이상은 «없는 주소»(Modbus 예외 02)로 답합니다 — 스캔의 경계 탐색이 여기서 끝을 찾습니다.
- 쓰기 요청(기능 코드 5 · 6 · 15 · 16)은 예외 01 로 거절합니다.
시험 순서
- 엣지 화면 머리줄의 PLC 프로파일링 을 엽니다.
- 새 PLC 정보 입력 을 고르고 이름 «건조로 #2», 설명(필수), 프로토콜 Modbus, 위에서 정한 IP 와 포트
5020을 넣습니다. - 스캔 시간을 5분 으로 정합니다.
- 키트의 HMI 사진과 코멘트 CSV 를 첨부합니다(선택).
- 시작 합니다.
- 스캔이 끝나면 AI 로 이름 만들기 를 누릅니다.
- ④ 확인 · 등록 화면에서 정확도와 근거를 보고, 맞는 것을 체크해 등록합니다.
기대 결과
- 사진의 설정값 100.8 · 100.9 · 10.15 · 10.16 · 102.0 이 40011~40015 와 짝지어집니다.
- 사진의 35 · 640 · 111 · 999 도 각 주소와 짝지어집니다.
- 사진의 램프(운전 · 정지 · 자동 · 이상)는 코일 00001~00004 와 짝지어집니다.
- 코멘트 CSV 의
49001은 스캔 영역 밖이라 버려집니다 — 정상입니다. - 사진에 촬영 시각(EXIF)이 없으면 올린 시각의 값과 비교합니다. 그래서 온도 · 개도 · 압력처럼 움직이는 값은 맞지 않을 수 있습니다 — 고정값과 설정값이 짝의 기준입니다.
시험용입니다
이 키트는 실제 가동 중인 PLC 가 아니라 시험용입니다. 시뮬레이터는 쓰기를 거절하고(읽기 전용) 모든 네트워크 주소에서 연결을 받으므로, 시험망에서만 돌리고 시험이 끝나면 끕니다.
프로토콜별 사전 설정과 제약
실제 PLC 를 스캔하기 전에 아래를 확인하세요. 엣지 화면도 시작 화면에서 프로토콜을 고르면 같은 내용을 대상 영역 위에 보여 줍니다.
공통
- 동시 접속 수가 제한된 PLC 는, 기존 수집이 연결을 쓰고 있으면 스캔 연결이 거절될 수 있습니다. 이때 스캔은 «두 번째 연결 거절» 사유로 멈춥니다.
- 방화벽에서 PLC 포트가 열려 있어야 합니다.
지멘스 S7 (1200/1500)
- CPU 속성 › 보호 & 보안 › 연결 메커니즘 › «원격 파트너의 PUT/GET 통신 액세스 허용» 이 켜져 있어야 M · I · Q 도 읽힙니다. 보호 수준이 «전체 접근 금지» 여도 읽을 수 없습니다.
- TIA Portal 에서 «최적화된 블록 액세스» 로 만든 DB 는 주소로 읽을 수 없어 스캔에서 빠집니다(현장 1200/1500 에 많습니다). 그 DB 의 «최적화된 블록 액세스» 를 끄고 다시 다운로드해야 읽힙니다.
미쓰비시
- PLC 이더넷 설정에 MC 프로토콜(SLMP) 포트가 열려 있고, 통신 데이터 코드가 «바이너리» 여야 합니다.
- FX3 는 이더넷 어댑터(FX3U-ENET 등)의 MC 프로토콜 설정이, A 시리즈는 이더넷 모듈의 1E 프레임 통신이 필요합니다.
- ZR(확장 파일 레지스터)은 기본 스캔 영역에 들어 있지 않습니다.
LS
- FEnet 모듈의 «XGT 전용 프로토콜»(기본 포트
2004)이 켜져 있고, 접속 허용 IP 에 엣지가 들어 있어야 합니다. - XGI / XEC 에서 직접 주소(
%MW·%MX등) 없이 이름만 있는 변수는 주소로 읽을 수 없어 스캔에서 빠집니다.
Modbus
- 어느 주소에 무엇이 있는지는 장비마다 다릅니다. Unit ID 가 틀리면 아무것도 읽히지 않습니다.
- RTU-TCP 게이트웨이를 거치면 매우 느리므로 스캔 시간을 30분 이상으로 잡으세요.