1. 개요
S7-200 SMART PLC가 Modbus RTU 마스터 또는 슬레이브로 동작할 때 내부 메모리 영역(I, Q, AIW, V)과 표준 Modbus 주소 사이에는 고정된 매핑 관계가 있습니다. 본 문서는 지멘스 공식 기술 문서를 바탕으로 S7-200 SMART의 Modbus 주소 매핑 규칙을 완전한 주소 대조표, 구성 단계, 통신 예시 및 문제 해결 가이드와 함께 자세히 설명합니다.
S7-200 SMART는 두 가지 Modbus 동작 모드를 지원합니다.
- Modbus RTU 마스터(Master): 통신 요청을 능동적으로 발행하여 슬레이브 기기를 읽거나 제어
- Modbus RTU 슬레이브(Slave): 마스터의 읽기/쓰기 요청에 수동으로 응답
2. Modbus 주소 유형 설명
Modbus 프로토콜은 4가지 데이터 영역을 정의하며, 각 영역에는 고정된 주소 범위와 기능 코드가 있습니다.
| Modbus 주소 영역 | 기능 코드 | 읽기/쓰기 | 데이터 형식 | 대응 S7-200 SMART 메모리 영역 |
|---|---|---|---|---|
| 0xxxx(코일) | 01(코일 읽기) / 05(단일 코일 쓰기) / 15(여러 코일 쓰기) | 읽기/쓰기 | 비트(1 bit) | Q 영역 디지털 출력 |
| 1xxxx(이산 입력) | 02(이산 입력 읽기) | 읽기 전용 | 비트(1 bit) | I 영역 디지털 입력 |
| 3xxxx(입력 레지스터) | 04(입력 레지스터 읽기) | 읽기 전용 | 워드(16 bit) | AIW 아날로그 입력 |
| 4xxxx(유지 레지스터) | 03(유지 레지스터 읽기) / 06(단일 레지스터 쓰기) / 16(여러 레지스터 쓰기) | 읽기/쓰기 | 워드(16 bit) | V 메모리 영역(구성 가능) |
중요 안내: Modbus 주소는 1 기반(1-based) 번호 매기기를 사용하여 1부터 셉니다. 반면 PLC 내부 주소는 보통 0 기반(0-based)으로 0부터 시작합니다.
3. S7-200 SMART Modbus 주소 매핑 표
3.1 디지털 출력 영역(Q 영역) → 0xxxx 코일
디지털 출력 Q 영역은 Modbus 0xxxx 코일 영역에 매핑되며 읽기/쓰기 동작을 지원합니다.
| Modbus 주소 | S7-200 SMART 주소 | 설명 |
|---|---|---|
| 00001 | Q0.0 | 0채널 0비트 |
| 00002 | Q0.1 | 0채널 1비트 |
| 00003 | Q0.2 | 0채널 2비트 |
| 00004 | Q0.3 | 0채널 3비트 |
| 00005 | Q0.4 | 0채널 4비트 |
| 00006 | Q0.5 | 0채널 5비트 |
| 00007 | Q0.6 | 0채널 6비트 |
| 00008 | Q0.7 | 0채널 7비트 |
| 00009 | Q1.0 | 1채널 0비트 |
| 00010 | Q1.1 | 1채널 1비트 |
| 00011 | Q1.2 | 1채널 2비트 |
| 00012 | Q1.3 | 1채널 3비트 |
| 00013 | Q1.4 | 1채널 4비트 |
| 00014 | Q1.5 | 1채널 5비트 |
| 00015 | Q1.6 | 1채널 6비트 |
| 00016 | Q1.7 | 1채널 7비트 |
| 00017 | Q2.0 | 2채널 0비트 |
| 00018 | Q2.1 | 2채널 1비트 |
| ... | ... | 이하 동일. 8개 주소마다 1바이트에 대응 |
| 00256 | Q31.7 | 최대 주소(최대 32바이트 출력) |
계산 공식: Modbus 주소 = 채널 번호 × 8 + 비트 번호 + 1
예시: Q2.3에 접근할 때 Modbus 주소 = 2×8 + 3 + 1 = 00020
기능 코드:
- 코일 상태 읽기: 기능 코드 01
- 단일 코일 쓰기: 기능 코드 05
- 여러 코일 쓰기: 기능 코드 15(0x0F)
주의 사항:
- Q 영역 주소 매핑은 고정되어 있어 추가 구성이 필요 없음
- 실제 사용 가능한 Q 포인트 수는 CPU 모델과 확장 모듈에 따라 달라짐
- 해당 Q 포인트가 하드웨어에 없으면 읽어오는 값은 항상 0
3.2 디지털 입력 영역(I 영역) → 1xxxx 이산 입력
디지털 입력 I 영역은 Modbus 1xxxx 이산 입력 영역에 매핑되며 읽기 전용입니다.
| Modbus 주소 | S7-200 SMART 주소 | 설명 |
|---|---|---|
| 10001 | I0.0 | 0채널 0비트 |
| 10002 | I0.1 | 0채널 1비트 |
| 10003 | I0.2 | 0채널 2비트 |
| 10004 | I0.3 | 0채널 3비트 |
| 10005 | I0.4 | 0채널 4비트 |
| 10006 | I0.5 | 0채널 5비트 |
| 10007 | I0.6 | 0채널 6비트 |
| 10008 | I0.7 | 0채널 7비트 |
| 10009 | I1.0 | 1채널 0비트 |
| 10010 | I1.1 | 1채널 1비트 |
| 10011 | I1.2 | 1채널 2비트 |
| 10012 | I1.3 | 1채널 3비트 |
| 10013 | I1.4 | 1채널 4비트 |
| 10014 | I1.5 | 1채널 5비트 |
| 10015 | I1.6 | 1채널 6비트 |
| 10016 | I1.7 | 1채널 7비트 |
| 10017 | I2.0 | 2채널 0비트 |
| 10018 | I2.1 | 2채널 1비트 |
| ... | ... | 이하 동일. 8개 주소마다 1바이트에 대응 |
| 10256 | I31.7 | 최대 주소(최대 32바이트 입력) |
계산 공식: Modbus 주소 = 10000 + 채널 번호 × 8 + 비트 번호 + 1
예시: I3.5에 접근할 때 Modbus 주소 = 10000 + 3×8 + 5 + 1 = 10030
기능 코드: 이산 입력 읽기에는 기능 코드 02 사용
주의 사항:
- I 영역 주소 매핑은 고정되어 있어 추가 구성이 필요 없음
- 이산 입력은 읽기 전용이며 마스터가 쓸 수 없음
- 실제 사용 가능한 I 포인트 수는 CPU 모델과 확장 모듈에 따라 달라짐
3.3 아날로그 입력 영역(AIW 영역) → 3xxxx 입력 레지스터
아날로그 입력 AIW 영역은 Modbus 3xxxx 입력 레지스터 영역에 매핑되며 읽기 전용입니다.
| Modbus 주소 | S7-200 SMART 주소 | 설명 |
|---|---|---|
| 30001 | AIW0 | 1번째 아날로그 입력 채널 |
| 30002 | AIW2 | 2번째 아날로그 입력 채널 |
| 30003 | AIW4 | 3번째 아날로그 입력 채널 |
| 30004 | AIW6 | 4번째 아날로그 입력 채널 |
| 30005 | AIW8 | 5번째 아날로그 입력 채널 |
| 30006 | AIW10 | 6번째 아날로그 입력 채널 |
| 30007 | AIW12 | 7번째 아날로그 입력 채널 |
| 30008 | AIW14 | 8번째 아날로그 입력 채널 |
| 30009 | AIW16 | 9번째 아날로그 입력 채널 |
| 30010 | AIW18 | 10번째 아날로그 입력 채널 |
| ... | ... | 이하 동일, 스텝은 2 |
| 30056 | AIW110 | 56번째 아날로그 입력 채널(최대) |
계산 공식: Modbus 주소 = 30000 + AIW 번호 / 2 + 1
예시: AIW20을 읽을 때 Modbus 주소 = 30000 + 20/2 + 1 = 30011
기능 코드: 입력 레지스터 읽기에는 기능 코드 04 사용
주의 사항:
- AIW는 워드 어드레싱이며 각 AIW는 2바이트를 차지하므로 주소 스텝 1이 AIW 스텝 2에 대응
- 입력 레지스터는 읽기 전용이며 마스터가 쓸 수 없음
- 아날로그 입력값 범위는 보통 0-32767(단극성) 또는 -32768~32767(양극성)
- 실제 사용 가능한 AIW 수는 아날로그 모듈의 채널 수에 따라 달라짐
3.4 V 메모리 영역 → 4xxxx 유지 레지스터
V 메모리 영역의 매핑은 구성 가능하며 Modbus 슬레이브 명령 MBUS_INIT의 두 파라미터로 정의합니다.
- HoldStart: 유지 레지스터 영역의 시작 V 주소(예: &VB1000)
- MaxHold: 유지 레지스터 영역의 워드 수(단위: 워드, 즉 VW의 수)
매핑 규칙:
| Modbus 주소 | S7-200 SMART 주소 | 설명 |
|---|---|---|
| 40001 | VW[HoldStart] | 1번째 유지 레지스터 |
| 40002 | VW[HoldStart + 2] | 2번째 유지 레지스터 |
| 40003 | VW[HoldStart + 4] | 3번째 유지 레지스터 |
| 40004 | VW[HoldStart + 6] | 4번째 유지 레지스터 |
| ... | ... | 이하 동일, 스텝은 2바이트 |
| 400XX | VW[HoldStart + 2 × (XX - 1)] | XX번째 유지 레지스터 |
완전한 예시: HoldStart = &VB1000, MaxHold = 100인 경우
| Modbus 주소 | V 메모리 주소 | 바이트 범위 | 설명 |
|---|---|---|---|
| 40001 | VW1000 | VB1000-VB1001 | 1번째 유지 레지스터 |
| 40002 | VW1002 | VB1002-VB1003 | 2번째 유지 레지스터 |
| 40003 | VW1004 | VB1004-VB1005 | 3번째 유지 레지스터 |
| 40004 | VW1006 | VB1006-VB1007 | 4번째 유지 레지스터 |
| 40005 | VW1008 | VB1008-VB1009 | 5번째 유지 레지스터 |
| ... | ... | ... | ... |
| 40100 | VW1198 | VB1198-VB1199 | 100번째 유지 레지스터(마지막) |
기능 코드:
- 유지 레지스터 읽기: 기능 코드 03
- 단일 레지스터 쓰기: 기능 코드 06
- 여러 레지스터 쓰기: 기능 코드 16(0x10)
주의 사항:
- V 메모리 영역 매핑은 구성 가능하며 MBUS_INIT 명령의 HoldStart와 MaxHold 파라미터로 설정
- HoldStart는 &VB1000처럼 VB 주소를 가리켜야 함
- MaxHold의 단위는 바이트(VB)가 아니라 워드(VW)
- 유지 레지스터 영역이 PLC 프로그램에서 이미 사용 중인 V 메모리와 충돌하면 안 됨
- MaxHold를 100으로 설정하면 VB1000-VB1199까지 총 200바이트를 점유
4. PLC 슬레이브 구성 단계
4.1 Modbus 슬레이브 명령 라이브러리 설치
- STEP 7-Micro/WIN SMART 프로그래밍 소프트웨어 열기
- 명령 트리에서 「라이브러리」 폴더 찾기
- Modbus Slave 라이브러리가 없으면 먼저 가져오기: 「라이브러리」 우클릭 →「라이브러리 가져오기」→ Modbus Slave 라이브러리 파일 선택
- 라이브러리 파일은 보통 지멘스 공식 웹사이트에서 다운로드하며 이름은 「Modbus Slave」
4.2 MBUS_INIT 명령을 호출하여 슬레이브 초기화
첫 번째 스캔 주기(SM0.1)에서 MBUS_INIT 명령을 호출합니다. 파라미터는 다음과 같습니다.
| 파라미터 이름 | 값 범위 | 설명 |
|---|---|---|
| Mode | 0 / 1 | 0=Modbus 슬레이브 비활성화하고 일반 프리포트로 복귀, 1=Modbus 슬레이브 활성화 |
| Baud | 1200-115200 | 전송 속도. 자주 쓰는 값: 9600, 19200, 38400, 115200 |
| Parity | 0 / 1 / 2 | 패리티: 0=없음, 1=홀수, 2=짝수 |
| Port | 0 / 1 | 통신 포트: 0=온보드 RS485 포트, 1=시그널 보드 SB CM01의 RS485 포트 |
| SlaveAddr | 1-247 | Modbus 슬레이브 주소. 같은 버스에서 중복 불가 |
| HoldStart | &VBxxx | 유지 레지스터 영역 시작 V 주소 포인터(예: &VB1000) |
| MaxHold | 0-10000 | 유지 레지스터 영역 워드 수(단위: 워드). 100이면 VW 100개 |
| Done | BOOL | 초기화 완료 플래그 비트 |
| 오답 | BYTE | 오류 코드 |
4.3 MBUS_SLAVE 명령 메인 폴링
메인 프로그램 루프에서 매 스캔 주기마다 MBUS_SLAVE 명령을 호출해야 합니다.
- 이 명령은 Modbus 마스터가 보낸 요청을 처리
- 호출하지 않으면 슬레이브가 마스터에 응답할 수 없음
- 파라미터: Done(완료 플래그), 오답(오류 코드)
4.4 V 메모리 영역 데이터 구성
HoldStart로 지정한 V 주소 영역에 읽고 쓸 데이터를 저장합니다.
- 마스터가 쓴 데이터는 이 영역에 저장
- PLC 프로그램은 이 영역에서 데이터를 읽어 처리
- 프로그램에서 사용 중인 다른 V 주소와 충돌하지 않도록 주의
5. PLC 마스터 구성 및 읽기 예시
5.1 MBUS_CTRL 명령을 호출하여 마스터 초기화
첫 번째 스캔 주기(SM0.1)에서 MBUS_CTRL 명령을 호출하여 Modbus 마스터를 초기화합니다.
| 파라미터 이름 | 값 범위 | 설명 |
|---|---|---|
| Mode | 0 / 1 | 0=Modbus 마스터 비활성화, 1=Modbus 마스터 활성화 |
| Baud | 1200-115200 | 전송 속도. 슬레이브와 일치해야 함 |
| Parity | 0 / 1 / 2 | 패리티. 슬레이브와 일치해야 함 |
| Port | 0 / 1 | 통신 포트: 0=온보드 RS485, 1=시그널 보드 |
| Timeout | 1-32767 ms | 슬레이브 응답 대기 시간. 1000ms 권장 |
| Done | BOOL | 초기화 완료 플래그 비트 |
| 오답 | BYTE | 오류 코드 |
5.2 MBUS_MSG 명령을 호출하여 읽기/쓰기 요청 발행
MBUS_MSG 명령은 한 번의 Modbus 읽기/쓰기 요청을 발행하는 데 사용합니다.
| 파라미터 이름 | 값 범위 | 설명 |
|---|---|---|
| First | BOOL | 최초 실행 펄스. 상승 에지 감지 시 요청 발행 |
| Slave | 1-247 | 슬레이브 주소 |
| RW | 0 / 1 | 0=읽기 요청, 1=쓰기 요청 |
| Addr | Modbus 주소 | 접근할 Modbus 주소. 40001이면 1번째 유지 레지스터 |
| Count | 1-120 | 읽고 쓸 레지스터/코일 수 |
| 데이터Ptr | &VBxxx | 데이터 버퍼 포인터(예: &VB2000) |
| Done | BOOL | 이번 요청 완료 플래그 비트 |
| 오답 | BYTE | 오류 코드 |
5.3 유지 레지스터 읽기 예시
주소가 1인 슬레이브 기기에서 유지 레지스터 10개(40001-40010)를 읽는다고 가정합니다.
- First: 펄스 신호로 트리거
- Slave: 1
- RW: 0(읽기)
- Addr: 40001
- Count: 10
- 데이터Ptr: &VB2000
읽기 성공 후 VB2000부터 시작하는 20바이트에 레지스터 10개의 데이터가 저장됩니다.
6. 자주 묻는 질문과 문제 해결 가이드
6.1 통신 무응답, 슬레이브가 답하지 않음
- 배선 확인: RS485의 A+와 B-가 역접속되지 않았는지. 이것이 가장 흔한 실수
- 파라미터 일치성 확인: 마스터와 슬레이브의 전송 속도, 데이터 비트, 정지 비트, 패리티는 완전히 일치해야 함
- 슬레이브 주소 확인: SlaveAddr이 올바른지. 버스에 중복 주소가 없어야 함
- 버스 전압 측정: A선(D+)은 B선(D-)보다 약 200mV 이상 높아야 함
- 종단 저항 확인: 버스 양끝에 120Ω 종단 저항이 있는지(장거리에서 필요)
- Port 파라미터 확인: 올바른 통신 포트(0 또는 1)를 선택했는지
6.2 데이터를 읽을 수 없거나 데이터가 올바르지 않음
- 주소 형식 확인: Modbus 주소에는 1 기반과 0 기반 두 가지 표기가 있어 구분에 주의
- HoldStart 확인: 유지 레지스터 시작 주소 설정이 올바른지 확인
- MaxHold 확인: 유지 레지스터 수가 충분한지 확인
- 주소 범위 확인: 읽을 주소가 MaxHold로 정의한 범위 내인지
- 바이트 순서 확인: 32비트 데이터의 상위/하위 워드 순서가 마스터와 맞는지
6.3 데이터가 깨지거나 숫자가 올바르지 않음
- 데이터 형식 확인: 16비트 정수, 32비트 정수, 부동소수점 중 무엇인지 확인
- 바이트 순서 확인: 빅엔디안과 리틀엔디안이 일치하는지
- 워드 순서 확인: 32비트 데이터의 상위/하위 워드 순서가 올바른지
- 스케일링 확인: 배율이 필요한지(예: 0.1℃ 단위 값은 10으로 나눠야 함)
- 음수 처리 확인: 음수는 2의 보수로 표현. 부호 있음과 부호 없음의 차이에 주의
6.4 간헐적 통신 실패
- 실드 케이블 확인: RS485 선에 실드 트위스트 페어 케이블을 사용하고 실드를 편측 접지했는지
- 버스 길이 확인: 9600bps에서 최대 1200m, 115200bps에서 최대 약 100m
- 슬레이브 수 확인: 하나의 RS485 버스에는 슬레이브 최대 32대(리피터 없이)
- 전자기 간섭 확인: 통신선이 동력선과 평행하게 배선되지 않았는지, 간섭원이 없는지
- 타임아웃 설정 확인: Timeout 파라미터가 너무 작지 않은지. 적절히 늘려서 시험
6.5 오답 오류 코드 설명
| 오류 코드 | 설명 | 해결 방법 |
|---|---|---|
| 0 | 오류 없음 | - |
| 1 | 패리티 오류 | 패리티 설정 확인 |
| 2 | 전송 속도 미지원 | 전송 속도 파라미터 확인 |
| 3 | 타임아웃 오류 | 배선, 슬레이브 전원, 타임아웃 설정 확인 |
| 4 | 슬레이브 주소 오류 | SlaveAddr 파라미터 확인 |
| 5 | 확인 응답 미수신 | 슬레이브 무응답. 배선과 파라미터 확인 |
| 10 | 게이트웨이 오류 | 게이트웨이 구성 확인 |
7. 요약
S7-200 SMART의 Modbus 주소 매핑 규칙은 명확하고 간단합니다.
- 0xxxx 코일 영역 → Q 영역 디지털 출력에 대응, 읽기/쓰기
- 1xxxx 이산 입력 영역 → I 영역 디지털 입력에 대응, 읽기 전용
- 3xxxx 입력 레지스터 영역 → AIW 아날로그 입력에 대응, 읽기 전용
- 4xxxx 유지 레지스터 영역 → V 메모리 영역에 대응, 구성 가능, 읽기/쓰기
이 매핑 관계를 익히면 S7-200 SMART와 서드파티 기기의 Modbus RTU 통신을 빠르게 구현할 수 있습니다. 실제 적용에서는 먼저 Modbus Poll 같은 디버깅 소프트웨어로 통신을 테스트하고 주소 매핑이 올바른지 확인한 뒤 PLC 프로그램을 작성하는 것을 권장합니다.
8. 관련 링크
- Modbus RTU 통신 기초 튜토리얼
- Modbus 기능 코드 상세 해설
- 지멘스 S7-200 SMART Modbus 마스터 구성 실례
- RS485 버스 배선 규격
답글 작성