계장기술(PROCON)

기획특집 웹 기반 HMI 시스템 구축을 위한 통신(PLC, MODBUS)

페이지 정보

작성자 최고관리자 댓글 0건 조회 85회 작성일 20-06-11 11:57

본문

1. MODBUS RTU(시리얼) 통신과 MODUS TCP

통신은 프로그램 개발에 있어서 가장 기본이 된다. 4차 산업혁명 시대에도 5G 통신은 가장 중요한 위치에 있다. 모든 장치는 상호 통신으로 빠르게 데이터를 주고받으며 시스템을 운영한다. 통신이 중요한 위치에 있음에도 백그라운드로 이루어지는 통신에 대해서 너무 쉽게 생각하는 경향이 있지만, 프로그래머가 통신을 알고자 했을 때 특별히 가르쳐주는 기관을 찾기 힘들다.

필자가 운영하고 있는 http://www.devpia.com/UBI QUITOUS.MAEUL에 가입하는 사용자들의 대부분이 PLC 통신과 MODBUS RTU 통신에 관심을 많이 가지고 있고 궁금해한다. 대부분의 소프트웨어 개발자들은 MS 윈도우나 리눅스 시스템에서 프로그램을 개발하게 되는데, 프로그램 개발자들이 가장 먼저 접하는 것이 제어 장치와의 통신이다. 

일반적으로 시리얼 통신을 제공하는 장치들은 RS485나 RS232 통신을 제공하는 장치들이 주를 이루는데, 이러한 시리얼 통신 장치들은 대부분이 모디콘사의 MOD BUS 통신을 제공하고 있다. 모디콘사의 MODBUS는 오래전부터 표준 프로토콜처럼 사용되어 왔으며, 거의 모든 장치 업체가 MODBUS RTU 프로토콜을 기본으로 장치를 만들어 판매하고 있어 익혀두면 편리하다.

MODBUS 프로토콜은 TCP/IP 상에서 MODBUS T CP를 제공하고, MODBUS 프로토콜이 현재의 시스템에 사용하기에는 어드레스 체계와 통신 포맷이 구조적으로 모자란 부분이 있기 때문에 기타 업체는 자사 전용 프로토콜을 만들어 사용하기도 한다.

소프트웨어 개발자들이 가장 많이 접하게 되는 장치가 PLC이다. PLC는 자동화 제어를 위해서 가장 보편적으로 사용되는 제어기로, 사용이 편리하고 I/O의 수를 조정할 수 있으며, Digital Input, Digital Output, Analog In put, Analog Output를 이용하고, 내부 타이머를 이용하여 자동제어가 가능하고, PLC 프로그래머는 PLC를 이용하여 자동화를 구현한다.

국내에서는 LS산전(현 엘에스일렉트릭)의 PLC가 사용하기 편하고, 프로토콜을 공개하고 있어 개발자들이 접근하기 편하다. 외국산으로 미쯔비시의 MELSEC PLC가 많이 사용된다.

국내 LS산전(현 엘에스일렉트릭)의 PLC 통신 프로토콜 문서는 홈페이지나 필자가 운영하고 있는 http://www.devpia.com/UBIQUITOUS.MAEUL에서 구할 수 있으니 참고하기 바란다. 또 MELSEC 관련 통신 프로토콜도 위에 필자가 운영하는 자료실에서 구할 수가 있다.

PLC 로직 프로그래머는 전기적인 지식을 이용하여 프로그램을 작성한다. 필자는 PLC 래더 로직(LADDER LOGIC) 프로그램에 대한 부분은 생략하고, PLC와의 통신에 대해서만 소개한다.

096049468e993b19b16fbf3834f42fcb_1591843907_5934.png 

필자는 프로그램에 입문하는 개발자에게 몇 가지 도움이 될만한 단초를 제공하고자 한다. 예전과는 다르게 산업 분야의 프로그래머는 넓은 분야의 많은 지식을 가지고 있어야 한다. 시리얼 통신과 TCP/IP 통신 UDP/IP 통신, 네트워크의 IP의 구성과 사용 IP 공유기의 설정, 네트워크의 DDNS(Dynamic DNS)의 설정과 네트워크 포트 관리 등을 알아야 프로그램을 할 수 있는 환경이 구축된다.
예전과 다르게 지금은 아마존이나 MS 클라우드를 이용하는 프로그램 개발이 주를 이루고 있어 웹 기반의 화면 인터페이스와 데이터베이스의 구성 그리고 많은 웹 기반의 스크립트와 언어를 알고 있어야 프로그램을 진행할 수 있다. 그중에서 장치의 프로토콜과 관련된 통신은 자세하게 읽힐 수 있는 책이나 문서가 없어 인터넷을 찾아도 별로 도움이 안 된다.

물론 필자도 이러한 과정을 통하여 의지와 상관없이 통신 프로그램을 하게 된 경우다. 프로토콜 통신의 가장 기본은 전산학 책에서 볼 수 있는 컴퓨터 코드표가 가장 기본이 된다고 할 수 있다.

그리고 필자는 C언어를 주로 사용하고 있어 Buffer를 자르고 넣고 그리고 Token을 이용한 버퍼의 분리하는 것에 많은 시간을 할애한다. 지금은 자유자재로 사용하고 있지만, 초급일 때는 프로그램 명령어의 특성 파악이 되지 않아 많은 어려움이 있었다.

프로토콜을 배우고자 하는 사람들 중에 가장 많은 질문이 “어디 가면 배울 수 있어요?”이다. 필자의 대답은 “이미 배웠다. 또는 없다”이다. 프로토콜과 관련해 배울 수 있는 학원이 별도로 있지 않고, 프로토콜 통신을 하기 위한 공부는 전산학과의 경우 이미 배웠기 때문이다. 단지 응용을 하지 못하고 있는 것뿐이라고 필자는 생각한다.

헥사데시멀(Hexadecimal) 변환(헥사데시멀)은 화면에 표출되지 않는 코드를 2자리의 16진수 숫자로 화면에 표현해주는 것을 의미함)

printf(″ACK->″);
for(i=0;i›n;i++){
printf(″%02X″,BUF[i]);
}
printf(″\r\n″);

통신을 분석하거나 프로그램을 하면, 위에서 보는 바와 같은 코드를 헥사데시멀 코드로 화면에 표출하여 분석하게 된다. 위 코드는 분석할 때 필자가 자주 쓰는 방식이기도 하고, 누구나 프로토콜을 분석하기 위해서 사용하는 것이다.

PLC 통신을 설명하기 이전에 우선 MODBUS 통신에 대해서 간략하게 소개하고, 그 예를 설명한다. 

어떤 장치가 MODBUS RTU를 지원한다고 한다. 그리고 통신 미디어는 RS485이며, 현재 한 대가 연결되어 있으며, 장치 ID는 1번이다. 

RS485는 여러 개의 장치를 병열로 연결하여 수십 대의 장치를 순차적으로 통신이 가능한 통신 방식이다. 거리는 약 1200m라고 되어 있으나, 현장에서는 통신선의 환경과 통신 속도에 따라 매우 가변적이다.

RS485는 RS422을 사용하는 방식을 변형하여 사용하는 것으로 반이중 통신(Half Duplex)을 제공한다. 쉽게 말해 RS422은 TX의+ RX의+를 합하고, TX-와 RX-를 합하여 RS485로 사용한다고 생각하면 된다. RS485는 극성이 있으므로 장치와 연결 시 같은 극성끼리 연결을 하도록 한다.

RS485 통신은 마스터와 슬레브로 나뉜다. 마스터는 각각 슬레브에 요청을 하고, 요청의 응답이 오면 다음 장치에 요청 신호를 보낸다. 요청을 주관하는 것은 마스터로, 앞서 언급했듯이 반이중 통신은 동시에 여러 대와 통신하는 것이 아니라 마스터와 선택된 슬레브와 1:1 통신이 이루어지는 것이다. 잘못해서 동시에 다른 장치가 응답을 하면 수신 데이터가 깨져 데이터의 오류가 발생한다. 이러한 잘못된 데이터의 처리를 위해서 CRC16이라는 검증 코드를 사용한다.

다음은 CRC16 코드를 알아본다. 간단하게는 CRC16 코드의 결과값을 알려면 웹에서 지원하는 사이트에 접속하여 결과값을 볼 수 있다. [그림 1-3] 참조
https://crccalc.com에서 선택 Calc CRC-16 → CRC-16/MODBUS

모든 표시는 헥사데시멀로 표시되었음을 알린다.(헥사데시멀로 표현되는 0x는 생략한다. 일부 초보자들이 0x에 대하여 의문을 품기에 생략됨)

096049468e993b19b16fbf3834f42fcb_1591843964_4781.png 

  [그림 1-4]에서 보는 바와 같이 010400010002를 입력하면 7968이라는 결과값을 얻는다. 010400010 0027968 마스터의 장치 1번에 대한 요청 프로토콜이 완성되었다. 물론 CRC16은 실제 프로그램에서는 자동으로 계산되게 해야 한다. 여기서는 쉽게 설명하기 위해 crccalc.com을 이용하였다.

여기서 01은 헥사데시멀로 표현된 장치 번호 1번 모드버스 어드레스 영역 04는 십진수 30000번지를 0번지로 인식한다. 참고로, 03은 십진수 40000번지를 0번으로 인식한다. 그리고 0001은 시작 번지로 2바이트 길이로 1번지부터 읽는다는 것을 의미하며, 그리고 0002는 시작번지부터 WORD(2바이트)를 2개 읽는 것을 의미한다. 그리고 7968 앞에서 언급했듯이 CRC16값으로 슬레브가 받아 다시 계산하여 같은 값이 나오지 않으면 요청 프로토콜을 무시해 버리고, 에러 메시지를 송신한다.

요청 프로토콜에 대한 응답은 아래와 같은 형태다. 응답 데이터를 헥사데시멀로 표현해 보자. 01040400FF 0030745B가 왔다고 했을 때, 장치가 온도와 습도를 측정하는 장치라고 했을 때, 온도와 습도를 응답 데이터에서 변환한다.

우선 ID는 01번 장치에서 온 것을 의미한다. 그리고 04는 어드레스 영역이 30000번지대라는 것을 의미하고, 다음의 04는 데이터의 길이를 나타낸다. 총 데이터의 길이는 4바이트라는 것을 의미한다. 그리고 00FF는 헥사값으로 255를 나타낸다. 모드버스는 일반적으로 2바이트 단위에서는 소수점을 나타내지 못하므로 약속에 의해 *0.1을 하여 25.5의 값을 읽어낼 수 있다. 온도는 25.5값을 가진다.

096049468e993b19b16fbf3834f42fcb_1591844003_8071.png 

 [그림 1-6]에서와 같이 윈도우의 계산기를 이용하여 Hex 값을 십진수로 변환하는 이해를 돕도록 하겠다. 0030은 십진수로 나타내면 48이다. 그래서 습도는 48%이다. 그리고 CRC16/MODBUS는 745B이며, 01040 400F F0030을 넣어 같은 값이 나오지 않으면 값을 버리고 다시 요청 신호를 보낸다. 시리얼 통신의 경우 통신상에 전기적 노이즈가 데이터 값을 변형시킬 수 있기 때문에 반드시 CRC16을 체크하여야 한다.

지금까지 MODBUS RTU 프로토콜에 대해 설명하였고, 다음으로는 MODBUS TCP 프로토콜에 대해서 설명한다.

MODBUS TCP 프로토콜은 CRC16/MODBUS를 생략한 프로토콜이라고 생각하면 된다. TCP/IP 인터넷통신프로토콜은 자체적으로 CHECKSUM을 하고 있기 때문에 TCP/IP 프로토콜을 사용하여 데이데이 전송할 때 CRC16과 같은 자체 체크가 필요하지가 않다.

그러면 위에서 예로 사용한 온도와 습도를 요청하고 수신하는 것을 MODBUS TCP로 다시 구현하여 보기로 한다.

•MODBUS RTU 요청 포맷 : 0104000100027968 
•MODBUS TCP 요청 포맷 : 0000000000060104 00010002 

모드버스 TCP는 000000000006 프로토콜 앞에 6바이트를 추가하고, CRC16 2바이트를 삭제하면 완성된다. 여기서 0006은 뒤에 따라오는 프로토콜의 길이를 나타낸다. 그리고 이번에는 요청에 대한 수신 프로토콜을 MODBUS TCP로 나타내보기로 한다. 

•MODBUS RTU 수신 포맷 : 01040400FF0030 745B
•MODBUS TCP 수신 포맷 : 000000000007010 40400FF0030
MODBUS TCP는 MODBUS RTU를 알고 있으면 쉽게 변환이 가능하다.

이것으로 MODBUS RTU 프로토콜을 MODBUS T CP로 변환하는 방법을 알아보았다. MODBUS RTU프로토콜을 그대로 TCP/IP 통신 소켓 프로그램에 그대로 전송하는 경우도 볼 수 있는데, Serial to Ethernet 컨버터를 사용하는 경우 이러한 방법을 사용하기도 한다.


2. PLC 통신

필자는 PLC 통신에 대한 질문을 가장 많이 받는다. 앞서 MODBUS 통신은 RS485 통신이고 예제가 많아 구현하기 쉬우나, PLC 통신의 경우 PLC 메이커마다 프로토콜이 상이하기 때문에 통신을 직접 구현해야 한다.

LS산전(현 엘에스일렉트릭) PLC는 전용 프로토콜이라는 TCP/UDP 프로토콜을 제공한다. 대부분 TCP 전용 프로토콜을 사용하여 통신을 구현한다. PLC 통신 프로그램은 필자가 상세하게 설명하지 않겠다(앞서 소개한 사이트 자료실에 기본 예제와 문서가 있으니 참고하기 바람). 필자는 오래전에 문서를 기반으로 라이브러리를 만들어 사용하고 있으며, 상세한 설명은 다음 기회에 하고, 여기서는 PLC 프로토콜에 대해서면 이야기한다.

096049468e993b19b16fbf3834f42fcb_1591844059_6507.png 

1) LS산전(현 엘에스일렉트릭) PLC
•LS산전(현 엘에스일렉트릭) 연속읽기 프로토콜 포맷 : 4C4749532D474C4F46410000003301001400000D5400140000000100080025444233303134322000
통신 C라이브러리는 http://www.devpia.com/UBI QUITOUS.MAEUL에서 예제 프로그램과 함께 구할수 있다.

2) 미쯔비시(MITSUBISHI) MELSEC PLC
•MELSEC 연속읽기 프로토콜 요청 포맷 : 500000FFFF03000E00100001140000010100A 801000101
•MELSEC 연속읽기 프로토콜 수신 포맷
   : D00000FFFF030002000000
MELSEC PLC D메모리 4292번지부터 6WORD 데이터를 읽어오는 화면이다. REQ는 요청 프로토콜을 나타내며, ACK는 응답 프로토콜을 나타낸다. [그림 2-1] 참조

MELSEC MC Protocol 통신을 위한 포트 개방 시 주의하여야 할 것은 1025포트를 개방하고자 한다면, HEX로 0401을 입력하여야 정상적으로 작동한다.  [그림 2-2]  참조

096049468e993b19b16fbf3834f42fcb_1591844090_9462.png
3. WEB 기반 HMI 서버시스템(WEBMON)

앞에서 설명한 PLC나 센서 장치와의 통신을 이용하여 수집된 데이터는 데이터베이스에 저장하고, 실시간 데이터는 제어를 위한 데이터로 사용된다. 그리고 실시간 데이터는 HMI(Human Machine Interface) 표현을 위한 데이터로 사용된다.

다음은 수집된 데이터를 이용하여 스마트팜 시스템을 구축한 예이다. 스마트팜은 전 세계적인 이상 기후로 식량 생산이 감소하고 있는 추세이고, 식물공장과 같이 외부 기후의 영향을 덜 받는 시스템을 구축하고, 농촌의 최소한의 인력으로 안정된 생산을 하기 위함이다.

1) WEB 기반 HMI 시스템

필자는 WEB 기반 HMI 시스템을 개발 구축 운영하고 있다. WEBMON 시스템은 LINUX 시스템에서 운영이 가능하도록 개발되었다. MS 윈도 시스템에서 운영되는 SCADA 프로그램이 일반적이지만 MS 윈도 시스템에서 운영되는 SCADA 시스템은 O/S의 영향으로 불안정하게 운영되는 경우가 많다. 필자의 경우는 웹 기반의 HMI 서버시스템에 데이터베이스를 구축하고, 스마트팜(SMART FARM) 센서의 데이터를 저장하여 식물 생장의 빅데이터로 사용하고 있다.

WEBMON 시스템은 멀티 사이트로 운영이 가능하도록 구성되어 있고, 로그인 ID에 따라 서버는 다른 사이트의 인터페이스로 연결이 가능하도록 구성되어 있다.

서버시스템을 IDC(Internet Data Center)에서 운영하면 ASP(Application Service Provider) 서버로 사용이 가능하다. 이 경우 저렴한 비용으로 빅데이터 사이트를 구축할 수 있어 유리하다. 또한, 사용이 쉽게 되어 있어 할당된 어드레스를 이용하여 데이터의 실시간 반영과 알람 메시지를 수신할 수 있다.  [그림 3-1] 참조
 096049468e993b19b16fbf3834f42fcb_1591844148_7185.png
개별 사이트 작업자는 웹 인터페이스를 이용하여 H MI를 구성할 수 있도록 되어 있고, 사용자가 언제든지 수정 및 삭제가 가능하다.  [그림 3-2] 참조

웹 기반 HMI의 모바일 지원은 하이브리드형으로 제공하기 때문에 앱의 수정 없이 서버에서 구성을 수정하는 것이 가능하다.  [그림 3-3] 참조

096049468e993b19b16fbf3834f42fcb_1591844173_6615.png 

실시간으로 센서의 값을 표출하고, 실시간 제어기기의 상태를 표시한다. 또한, 버튼을 이용하여 제어가 가능하다. 그리고 설정값의 원격 변경이 가능하다. 웹 기반의 HMI이지만 로컬 HMI에서의 모든 기능을 수행한다. 
[그림 3-4 ] 참조
센서를 기반으로 제어가 가능한 제어기를 선택하여 제어값을 부여할 수 있도록 되어 있어 어떤 센서와 어떤 제어기와도 조합하여 운영이 가능하다. 스케줄 제어에는 반복 제어와 멀티 시간 제어 그리고 센서 제어, 예약 제어로 나누어 등록이 가능하기 때문에 사용이 편리하다.  [그림 3-5] 참조
 096049468e993b19b16fbf3834f42fcb_1591844213_5551.png 

[그림 3-6] 통계 리포트는 pdf나 엑셀로 반출이 가능하도록 되어 있으며, 데이터베이스에 저장되는 모든 데이터를 원하는 포맷으로 만들어 출력이 가능하도록 편집 모드를 제공하고 있다.

스마트팜에서는 작물의 생장을 자동으로 촬영하여 식물의 생장을 기록할 수 있도록 한다. 네트워크 카메라와 연동하기 위해서는 좀 더 기술이 필요로 하는데, 현재 삼성 카메라 및 하이크비전 카메라와의 연동이 자유롭게 되어 있다. 틸트(TILT)가 지원되는 카메라의 경우, 자동으로 원하는 위치의 사진을 기록하는 것을 지원한다.
[그림 3-7] 참조

WEBMON 시스템은 저장되는 모든 데이터를 트렌드 형태로 나타낼 수 있도록 편집 모드를 지원하고, 모든 데이터를 사용자가 원하는 형태로 추가 삭제할 수 있도록 지원하고 있다. [그림 3-8] 참조

096049468e993b19b16fbf3834f42fcb_1591844237_9295.png 

지금까지 PLC 통신과 MODBUS 그리고 웹 기반의 HIM 대해서 간략하게 설명하였다. 프로토콜과 관련해서는 읽기만을 언급해서 모자란 면이 있다. 그리고 PLC에 대한 설명도 지면에서 상세하게 설명하지 못한 면이 있어 독자에게 미안한 마음이다. 웹 기반의 HMI에 대한 설명은 로컬의 SCADA 시스템처럼 웹 기반으로도 HMI가 가능하다는 것을 보여주고자 기본 기능만 간략하게 설명하였다.


anyethernet@naver.com