본문 바로가기
  • IT & Factory Automation
Factory Automation

Codesys Modbus TCP Master (Client) 설정방법

by EasyMotion 2023. 2. 28.
반응형

안녕하세요. 자동화 제어 유용한 정보를 하나하나 쉽게 알려드리는 이지원 입니다.

 

Modbus TCP 프로토콜은 누구나 사용 가능한 통신방식이기 때문에 Codesys에서도 별도의 옵션없이 사용할 수 있습니다.

이번 시간에는 Codesys Controller를 Modbus TCP Master (Client)로 설정하는 방법에 대해 소개하겠습니다.

 

Codesys Controller를 Modbus TCP Slave (Server)로 사용하려면 아래 포스팅을 참고하시기 바랍니다. 

Codesys에서 ModbusTCP Slave (Server) 설정방법

 

1. 프로젝트 생성

Codesys에서 새 프로젝트를 생성합니다. 

[Templates]에서는 "Standard project"를 선택하여 새 프로젝트를 만듭니다. 

 

 

 

 

Device 설정에서는 본인이 가지고 있는 Codesys Controller를 선택합니다. 

Codesys Controller 한 대가 있어야 통신 테스트를 해 볼 수 있습니다. 

[PLC_PRG in] 항목은 ST (Structured Text)로 선택해 보았습니다.

 

 

 

 

프로젝트가 생성되었으면, [Device] 항목에 마우스를 올려놓고 마우스 오른쪽 버튼을 눌러 [Add Device] 를 클릭합니다.

 

 

 

 

 

[Modbus]를 선택하지 말고, [Ethernet Adapter] 의 하위메뉴인 [Ethernet] 을 선택합니다.

선택 후, [Add Device] 를 누르면 장치가 추가됩니다. [Close] 를 눌러 창을 닫습니다.

 

 

 

 

추가된 [Ethernet] 장치가 화면 왼쪽에 나타납니다. 

이 장치를 더블클릭하면, 속성을 변경할 수 있습니다. 

여기서는 IP 주소를 변경해야 합니다. 내 Codesys controller에 맞게 IP를 설정합니다.

 

 

 

2. Modbus TCP Master 설정

1) 장치 추가

이제 Modbus TCP Master 장치를 추가해보겠습니다. 

화면 좌측의 [Ethernet] 을 클릭하고 마우스 오른쪽버튼의 메뉴를 이용해 [Add Device]를 하면, 

[Ethernet] 장치에 연결할 수 있는 목록이 나타납니다. 

[Modbus TCP Master] 를 선택하고 [Add Device] 를 클릭합니다. 창을 닫지 않은 채 그대로 둡니다.

 

 

 

 

좌측 [Device] 에서 조금 전에 추가된 [Modbus_TCP_Master] 를 선택하면,

[Add Device] 창에 [Modbus TCP Slave] 하위 메뉴인 [Modbus TCP Slave] 가 보입니다. 

이 장치를 선택하고 [Add Device] 를 클릭합니다. 

이제 장치추가가 완료되었으니 [Close] 를 눌러 창을 닫습니다.

 

 

 

2) Modbus TCP Master 설정

[Device] 항목에서 [Modbus_TCP_Master] 를 더블클릭합니다. 

여기서는 통신 timeout 등을 설정할 수 있습니다. 

 - Response timeout : Slave에서 응답을 올 때까지 기다리는 시간 

 - Socket timeout : 패킷과 패킷 사이의 제한시간 

 - Auto-reconnect : 응답이 없어 연결이 끊어져도 연결 가능한 상태가 되면 자동으로 재접속 하는 기능

(자세한 설명은 통신관련 자료를 참고하시기 바랍니다. )

 

timeout 설정시간이 너무 짧으면 통신 테스트 할 때 쉽게 접속이 끊어지기 때문에 조금씩 늘려주었습니다.

 

 

 

3) Modbus TCP Slave 설정

[Device] 항목에서 [Modbus_TCP_Slave] 를 더블클릭합니다.

[General] 탭이 보입니다. 여기서는 Slave 장치의 IP와 주고 받을 데이터 등을 설정할 수 있습니다.

우선, 연결할 Slave 장치의 IP부터 설정합니다. 통신 테스트를 위해 Slave IP를 제 컴퓨터의 IP로 설정하였습니다.

Response timeout 설정시간도 조금 늘려주었습니다. 

[Port] 는 "502" 에서 변경하지 마시기 바랍니다.

 

 

 

 

[Modbus Slave Channel] 탭을 클릭합니다. 여기에서는 주고 받을 데이터 유형과 길이 등을 설정합니다. 

화면 하단에 [Add Channel] 을 클릭하면 [Modbus Channel] 창이 나타납니다.

 

우선, '읽기 데이터'를 설정하겠습니다. 

[Access type] 에는 [Read Holding Registers (Function Code 3)] 을 선택합니다. 

(자세한 사항은 Modbus Function Code에 관련된 자료를 찾아보시기 바랍니다.)

 

[Length] 항목에서 데이터 길이를 "10" 으로 입력합니다. 

 

[Error handling] 은 통신에러가 발생했을 경우, 데이터를 유지할 지 0으로 변경할 지 선택하는 항목입니다. 

에러가 발생하면 데이터를 0으로 만드는 게 안전하다고 생각하여 [Set to zero] 를 선택하였습니다.

 

설정이 완료되면 [OK] 를 클릭합니다.

 

 

 

 

이번에는 '쓰기 데이터'를 설정하겠습니다.

[Access type] 에는 [Write Multiple Registers (Function Code 16)] 을 선택합니다.

(자세한 사항은 Modbus Function Code에 관련된 자료를 찾아보시기 바랍니다.)

 

'읽기 데이터'에서는 설정하지 않았던 Offset을 설정해 주어야 합니다. 

Offset은 데이터를 시작하는 번호 같은 개념입니다.

Offset을 설정하지 않으면 '읽기 데이터'와 '쓰기 데이터' 영역이 중복됩니다.

'읽기 데이터' 길이가 10 이기 때문에, Offset에도 10에 해당하는 16진수인 "0x000A" 를 입력합니다. 

이렇게 설정해야 '읽기 데이터' 10개 이후부터 '쓰기 데이터' 영역으로 사용할 수 있습니다.

 

[Length] 항목에서 데이터 길이를 "10" 으로 입력합니다. 

 

설정이 완료되면, [OK] 를 클릭합니다.

 

 

 

 

[ModbusTCPSlave I/O Mapping] 탭을 클릭합니다. 

여기서는 Slave와 주고 받을 데이터를 할당할 수 있습니다. 

화면에는 방금전에 생성한 '데이터 읽기 채널' 과 '데이터 보내기 채널' 에 각각 10개의 워드가 만들어져 있습니다. 

테스트를 위해 변수를 만들어보겠습니다. 

 

 

 

 

[PLC_PRG]  프로그램을 더블클릭하여, 변수를 선언하였습니다. 

배열 형태로 '읽기 데이터' 10개, '쓰기 데이터' 10개 워드를 만들었습니다.

 

 

 

 

선언한 변수들을 [ModbusTCPSlave I/O Mapping] 에 할당하였습니다. 

 

 

3. 통신 시뮬레이션

지금까지 설정한 것을 실제 통신 테스트로 구현해보겠습니다.

Codesys controller를 가지고 있지 않다면, 제 이전 포스팅 "Codesys 컨트롤러 없이 시뮬레이션 하기" 를 참조해주시기 바랍니다.

 

장치에 접속하기 위해,

① [Device] 에서 장치를 클릭하고, ② [Communcation Settings] 탭을 선택합니다.

③ [Scan Network] 를 실행하면, ④ 검색된 장치를 선택하고 ⑤ [OK] 를 클릭합니다. 

⑥ 온라인 접속을 위해 아이콘을 클릭하면, ⑦ 경고창이 나타납니다. [Yes] 를 클릭하여 다운로드를 진행합니다. 

 

 

 

 

프로그램은 성공적으로 돌아가고 있습니다.

아직 Slave 장치와 연결되지 않았기 때문에, 경고 표시가 보입니다.

테스트를 위해 Modbus TCP Slave 시뮬레이터를 실행해보았습니다.

 

 

 

 

Modbus TCP Slave 시뮬레이터를 실행하자 제 컴퓨터와 Codesys Controller 통신연결에 성공하였습니다.

(시뮬레이터 사용방법은 아래 포스팅을 참고해주시기 바랍니다.)

 

ModbusTCP 무료 시뮬레이터 다운로드

 

데이터 확인을 위해, 임의의 값을 '쓰기 데이터'에 넣어보았습니다. 

그러자 시뮬레이터의 Register 10~19 에 해당 값들이 나타났습니다. 

 

 

 

 

이번에는 Slave에서 값을 입력하여 '읽기 데이터'를 확인해 보겠습니다. 

여기서 중요한 점이 있습니다. Codesys는 변수를 선언하더라도 프로그램(POU)에서 사용하지 않으면 비활성화 됩니다. 

따라서, 읽기 변수를 임시로 다른 곳에 옮겨 넣는 구문을 한줄 추가하였습니다. 

이렇게하면 프로그램(POU) 안에서 변수가 사용되어 변수를 활성화 시킬 수 있습니다.

 

 

 

 

시뮬레이터의 Register 0~9 에 임의의 값을 입력하였습니다. 

그러자, Codesys '읽기 데이터' 변수에 해당 값들이 나타났습니다.

 

 

 

 

이번 시간에는 Codesys Controller를 Modbus TCP Master로 설정하는 방법을 소개했습니다.

소개한 방법대로 설정하면 큰 어려움 없이 데이터를 읽고, 쓸 수 있을 것입니다.

Modbus TCP Slave 설정방법은 아래 포스팅을 참고하시기 바랍니다. 감사합니다. 

 

Codesys에서 ModbusTCP Slave (Server) 설정방법

 

반응형

댓글