MODBUS RS-232 통신 예제

MODBUS 프로그램을 생성하여 RS-232 통신을 이용한 PLC-S 간 내부통신을 하고, 상호 정상적으로 통신하는 지에 대하여 알아보기 위하여 통신결과를 확인하도록 합니다.

프로그램 방법
가장 먼저 1, 2번PLC-S를 준비하고 2개의 PLC-S를 동작시키기 위하여 2개의 CICON프로그램을 실행시킵니다.

Serial 통신을 하기 위하여 상단 메뉴 바의 새 프로그램 메뉴를 이용하여 아래의 그림과 같이 스캔프로그램과 MODBUS RTU/MASTER 프로그램을 생성합니다.

 

그림1) MODBUS 프로그램 생성

 

스캔프로그램에서 상시 Y10을 ON 시켜주는 프로그램을 작성합니다.
L00에서 D80으로 데이터를 보내는 프로그램은 나중에 통신결과를 확인해보기 위한 래더 프로그램입니다.
(CICON 도움말 또는 PLC교육 자료집을 이용하면 쉽게 해결 할 수 있습니다.)

 

그림1) 스캔 프로그램

 

아래의 그림은 MODBUS RTU/Master 프로그램 초기화면 입니다. PLC-S에서 ‘슬롯 0’는 CPU 모듈을 의미하며, 내부통신을 위해서는 ‘슬롯 0’으로 설정해야 합니다.
(증설 통신모듈을 사용하기 위해서는 ‘슬롯 1’부터 지정하면 됩니다.)

 

  1. MODBUS RTU/Master 프로그램 초기 화면
    초기설정이 완료되었으면 ‘추가’버튼을 이용하여 Master단에서 수신/송신 명령을 내리기 위한 추가 설정을 합니다.

4-1. 추가버튼을 통하여 Master단 통신설정
가장 먼저 통신하고자 하는 MODBUS Slave 기기의 상태에 알맞은 국번을 입력합니다.
사용자가 원하는 기능을 사용하기 위한 Function을 선택합니다.
Point Number 슬롯에서 Slave 영역에 읽고/쓰기 할 영역을 설정하고 데이터 종류, 개수, Device를 설정합니다. (자세한 설명은 16p ~ 20p 참고하시기 바랍니다.)
설정이 완료되면 다음 그림과 같이 설정완료 상태를 확인 할 수 있습니다.

 

그림 1, 2, 3) MODBUS RTU/Master 통신 설정 완료 그림

 

 

다음과 같이 Master 단 설정이 완료되었다면 1번 PLC-S(Master)에 프로그램을 다운로드 후 2번PLC-S(Slave) 로 넘어갑니다.

 

S Master단과 Slave단이 통신을 잘 하는지 쉽게 알아보기 위하여 Slave단의 스캔프로그램은 프로그램이 동작하지 않는 프로그램을 만들어 줍니다.

지금까지는 Master단의 설정이었고 이제부터 Slave단의 설정을 하도록 하겠습니다. Slave역할을 하게 될 2번 PLC-S는 PLC 파라미터의 ‘모드버스’ 메뉴에서 국번을 통신할 PLC-S와 동일하게 맞춰 설정합니다. 사용자가 Master단에서 설정 한 Function의 기능과 대응되는 Slave Function을 선택하고 Master의 명령을 수행 할 주소를 입력합니다.
([ex]Master단에서 03 Read Holding Register Function을 사용했으므로 Slave MODBUS에서 Holding Register Function을 사용합니다.)

그림1) 2번 PLC-S의 모드버스 환경 설정

 

Master단과 Slave단의 설정이 모두 완료 되었으면 Master단에서 설정해둔 프로그램을 다운로드 후 메모리 모니터로 결과를 확인 할 수 있습니다. 확인 완료 후 Slave단 설정 프로그램 또한 마찬가지로 2번 PLC-S에 다운로드 후 메모리 모니터기능을 통하여 결과를 확인 할 수 있습니다.

먼저 Master역할을 하는 1번 PLC-S의 결과를 확인하겠습니다.
Master단의 스캔프로그램에 의하여 Y10영역에 ON이 되었음을 확인 할 수 있고, 06 Preset Single Register Function 값을 쓸 수 있는 상태가 됩니다. 06 Preset Single Register 를 통해 선정해준 Device주소의 값을 어떻게 변화 시키느냐에 따라 03 Read Holding Register Function 을 통해 선정된 Device 주소의 값 또한 변화합니다. Master단의 메모리모니터를 확인 후 2번 PLC-S에 2번 프로그램을 다운로드 하고 메모리 모니터 하면 D40 영역에 데이터 값이 써진 것을 확인 할 수 있습니다. 이는 자동전송으로 데이터를 받은 Slave가 Master의 명령에 대응하는 Function과 Slave단의 Address에 맞는 디바이스 영역에 값이 써진 것을 확인 할 수 있습니다.
다시 1번 PLC-S로 넘어와 D30영역에 값이 쓰여진 것을 볼 수 있습니다. 이는 2번 PLC-S영역에 쓰여진 데이터 값을 Word 의 크기로 다시 D30디바이스영역으로 가지고 온다는 것을 의미합니다.

 

Master 단의 1번 PLC-S 메모리모니터 결과 [1번 PLC-S]

 

Master단을 거친 후 2번 PLC-S에 Slave 프로그램을 다운로드 한 메모리 모니터 결과 [2번 PLC-S]

 

위의 1, 2번 과정을 거친 후 다시 1번 PLC-S로 돌아와 다운로드 한 메모리 모니터 결과 [1번 PLC-S]

 

Master단의 1번 PLC-S 특수프로그램을 설정 하는 과정에서 03 Read Holding Register Function을 설정하는 과정에서 Data 개수를 3개로 설정해 주었습니다. 이는 이미 2번 PLC-S에 쓰여진 데이터 값을 기준으로 연속하는3Word에 해당하는 데이터 값을 D30으로 읽어 오는 것을 의미 합니다. 그러나 2번 PLC-S에는 D40에 하나의 Word에 값이 입력되어있기 때문에 2번 PLC-S의 데이터 값[1,0,0]을1번 PLC-S의 D30으로 [1(D30), 0(D31), 0(D32)]의 값을 읽어 옵니다. 여기서 임의로 D31, D32영역에 어떤 임의의 값을 써준다고 해도 2번 PLC-S에서 ‘0’이라는 데이터 값을 가져왔기 때문에 0에서 변하지 않습니다. 그러나 2번 PLC-S에서 읽어온 값은 D30, 31, 32영역뿐이기 때문에 그 외 다른 영역의 값은 바뀐다는 사실을 아래의 그림에서 확인 할 수 있습니다.

 

그림 1) D31영역에 값 입력하기

 

그림 2) D31 ~ D39까지 값을 입력하였지만 이미 값이 쓰여진 영역에는 값의 변화가 없는 상태

MODBUS/RTU Master 프로그램 설정 창에서 통신결과를 L0000으로 설정을 해주었고, 스캔프로그램에서 L00으로 들어오는 데이터를 D80으로 전송했습니다. 메모리 모니터 확인으로 D80영역에 값이 증가하는 것으로 보아 송신이 성공했다는 사실을 알 수 있습니다.
(자세한 설명의 위의 설명과, SEND 명령어 설명, 예제 4-1을 참고하시기 바랍니다.)

 

그림 3) L00영역에서 보낸 통신결과 확인에 대한 메모리 모니터