MODBUS RS-232 통신 예제1 (SEND 명령어 이용)

프로그램 방법
1. 예제 프로그램 구성 하기 위해 SEND명령어에 대하여 알아보도록 하겠습니다.

SEND(P)
사용자가 정의한 형태의 프레임데이터를 Master국에서 Slave국으로 보내는 명령입니다. 이 명령을 사용하기 위해서는 RS232C/422/485 특수카드 설정에서 동작모드 프로토콜 설정을
프로토콜 특수 프로그램으로 지정 후 쓰기 하여야 합니다. SEND명령은 반드시 펄스로 실행이 되어야 합니다.
 
FORMAT

PID
특수 프로그램 이름 또는 특수프로그램 ID로 지정됩니다.

F_NAME
프레임 번호로 지정할 수 있으며 프레임 번호로 지정 시 다음과 같은 형식에 따라 지정하여야 합니다.
상위 바이트(Bit 8-F) : 통신방식 지정(0: RS232C, 1: RS422/485)
하위 바이트(Bit 0-7) : 특수 프로그램 내 프레임 번호.

통신방식 지정 (상위 바이트)

프레임 번호 (하위 바이트)

[EX] 통신 방식이 RS232C이고 프레임번호 3인 프레임을 송신하고자 할 때
SEND (PID) H0003 (Result)
 
Result
송신 결과를 통지 받을 워드 디바이스를 지정합니다.
Result Format
1번째 Bit(Bit 0) : 송신 완료 시 1 Scan On.
2번째 Bit(Bit 1) : 송신 실패 시 항상 On.
3번째 Bit - 8번째 Bit(Bit 2-7) : 항상 Off.
9번째 Bit – 16번째 Bit(Bit 8-F) : Error Code.(0=No Error)

에러코드

미사용

송신 Error 발생시 On

송신 완료시 1Scan On

Bit 8 ~ F

Bit 2 ~ 7

Bit 1

Bit 0

 

사용 예
Master국의 특수프로그램 PID가 3 이고, 프로토콜 편집기에 등록된 프레임 번호가 5 인 경우, 이 프레임을 1초마다 Slave국으로 송신하는 PLC 프로그램 예입니다.

 


RECV(P)
Slave국에서 사용하는 명령으로 프레임 데이터를 Master국으로부터 수신합니다. 사용자가 지정한 형태의 프레임과 일치하고 정상프레임일 경우 수신완료 플래그(Bit 0)를 On합니다. 이 명령을 사용하기 위해서는 RS232C/422/485 특수카드 설정에서 동작모드 프로토콜을 프로토콜 특수 프로그램으로 지정 후 쓰기 하여야 합니다. RECV명령은 반드시 펄스로 실행이 되어야 합니다.
 
FORAMT

PID
특수프로그램 ID로 지정됩니다.

F_NAME
프레임 번호로 지정할 수 있으며 프레임 번호로 지정 시 다음과 같은 형식에 따라 지정하여야 합니다.
상위 바이트(Bit 8-F) : 통신방식 지정(0: RS232C, 1: RS422/485)
하위 바이트(Bit 0-7) : 특수 프로그램 내 프레임 번호

통신방식 지정 (상위 바이트)

프레임 번호 (하위 바이트)

[EX] 통신 방식이 RS422/485이고 프레임번호 5인 프레임을 수신하고자 할 때
RECV (PID) H0105 (Result)
 
Result
송신 결과를 통지 받을 워드 디바이스를 지정합니다.
Result Format
1번째 Bit(Bit 0) : 수신 완료 시 1 Scan On.
2번째 Bit(Bit 1) : 수신 실패 시 항상 On.
3번째 Bit - 8번째 Bit(Bit 2-7) : 항상 Off.
9번째 Bit – 16번째 Bit(Bit 8-F) : Error Code.(0=No Error)

에러코드

미사용

송신 Error 발생시 On

송신 완료시 1Scan On

Bit 8 ~ F

Bit 2 ~ 7

Bit 1

Bit 0

사용 예
RS232C/422/485 통신카드를 이용하여 Master국으로부터 데이터를 수신합니다. 데이터 수신 후 사용자가 지정한 Frame Name데이터를 참조합니다.
PID가 2인 프로토콜 특수 프로그램에서으로 6번으로 지정된 Frame을 Slave국에서 수신하는 경우입니다.

 

 

예제 4번을 프로그래밍 하기 위하여 PLC-S 2개를 준비하고 2개의 PLC-S를 동작시키기 위하여 2개의 CICON프로그램을 실행시킵니다.

 

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

 

스캔프로그램에서 SEND명령어를 이용하여 1초 주기로 데이터를 보내주는 프로그램을 작성합니다.
(CICON 도움말 또는 PLC교육 자료집을 이용하면 쉽게 해결 할 수 있습니다.)

그림1) Master 단의 스캔 프로그램

 

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

그림1) MODBUS RTU/Master 프로그램 초기 화면

 

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

 

그림1) Serial 통신 프레임 설정 화면 그림2) Serial 통신 프레임 설정 완료 화면

SEND 스캔 프로그램 작성하기
Send명령어 Format은 다음과 같습니다. à SEND (PID) (F_NAME) (RESULT)
1. PID는 특수 프로그램 이름 또는 특수프로그램 ID로 특수프로그램 번호를 선정하면 됩니다.
2. F_NAME는 통신모드와 특수프로그램에서 생성된 통신설정번호와 조합합니다.
3. Result는 송신 결과를 통지 받을 워드 디바이스를 지정합니다.

 

SEND 명령어의 (F_NAME)는 16진수값으로 인식이 됩니다. 프레임의 개수가 10개가 넘어가능 사황에서는 16진수라는 점을 유의 하시기 바랍니다.

 

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

 

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

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

 

예)

Master단과 Slaver단 모두 설정이 완료 되었으면 Master설정 프로그램은 1번 PLC-S, Slave단 설정 프로그램은 2번 PLC-S에 순차적으로 다운로드 후 ‘메모리 모니터’기능을 통하여 각각의 결과를 확인 합니다.

먼저 Master역할을 하는 1번 PLC-S의 결과를 확인하겠습니다.
초기 Master 통신모드 설정 단계에서 프레임 2번에04 Read Holding Register Function을 설정하고 Device를 D10으로 설정했습니다. ‘메모리 모니터’ 를 하게 되면 Device설정에 의하여D10에는 이미 데이터 ‘0’이 쓰여져 있기 때문에 임의의 어떤 값도 쓰여지지 않습니다. (D10을 제외한 나머지 영역은 값 쓰기가 가능합니다.)
그 후 Slave단의 2번 PLC-S에서 프로그램을 다운로드 후 메모리모니터를 하게 되면04 Read Holding Register 에 의한 설정으로 어떤 값도 쓸 수 있습니다. 그러나 Master단의 Function 설정에서 06 Preset Single Register Function을 설정 했다면 Master단의 D10에는 값이 써지지만 Slave단의 D50영역에서는 ‘0’이라는 값이 이미 써져 있어 임의의 어떤 값도 쓰여질 수 없게 됩니다.