Rockwell EtherNet/IP
EtherNet/IP(CIP)로 Allen-Bradley Logix 컨트롤러에 접속합니다. 컨트롤러 태그 이름, 바이트 오프셋, 원자적 CIP 형식, 그리고 네트워크 검색.
Rockwell EtherNet/IP 드라이버는 CIP 태그 주소 지정을 쓰는 EtherNet/IP로 Allen-Bradley / Rockwell Logix 컨트롤러(ControlLogix, CompactLogix)와 이야기합니다. 값의 주소는 Logix 프로젝트에 선언된 컨트롤러 태그 이름으로 적으며, 레지스터 지도는 끼어들지 않습니다. Connector에서 Rockwell EtherNet/IP 드라이버 아래에 장치를 추가하십시오. 패널은 이 프로토콜이 쓰는 칸만 보여 줍니다.
연결
| 칸 | 뜻 | 기본값 |
|---|---|---|
| 호스트 | 컨트롤러 이더넷 포트의 IP 주소나 호스트 이름. | 비어 있음 |
| 슬롯 | 컨트롤러가 섀시의 몇 번째 자리에 꽂혀 있는지이며 0부터 셉니다. | 0 |
| 읽기 주기 (ms) | 스스로 값을 정하지 않은 태그에 적용되는 장치 전체의 읽기 주기. | 1,000 |
포트 칸은 없습니다. EtherNet/IP는 표준 TCP 포트 44818을 씁니다. CIP 경로는 백플레인과 슬롯으로 이루어지므로 섀시 어디에 꽂힌 컨트롤러에도 닿을 수 있습니다. 검색으로 찾은 컨트롤러는 슬롯 0에서 시작하며, 이 칸이 그것을 고치는 자리입니다. 랙 칸은 없습니다. CIP 경로는 랙 번호를 담지 않기 때문입니다. 요청은 10초 뒤에 시간이 초과됩니다. 장치 머리글은 조립된 엔드포인트를 보여 줍니다. 예를 들어 eip://192.168.0.10:0이며, 주소 뒤의 숫자가 슬롯입니다.
태그마다 자기 읽기 주기 (ms)를 정할 수 있으며, 태그 값이 0이면 장치의 주기로 되돌아갑니다.
주소 지정
Rockwell 태그의 주소는 태그 신호원 카드의 두 칸으로 적습니다.
| 칸 | 뜻 | 받는 값 | 기본값 |
|---|---|---|---|
| 컨트롤러 태그 | 컨트롤러에 선언된 그대로의 태그 이름입니다. 필수입니다. | 자유 입력 | 비어 있음 |
| 태그 안 오프셋 (바이트, BOOL은 비트) | 그 태그의 데이터 안에서 값이 놓인 자리입니다. 바이트 위치이며, 부울 태그에서는 비트 위치입니다. | 0~255 | 0 |
드라이버는 이름으로 부른 컨트롤러 태그를 열고, 그 데이터 버퍼에서 오프셋 자리의 값을 집어 옵니다. 평범한 원자적 태그라면 오프셋은 0으로 둡니다. 오프셋은 컨트롤러 태그 하나가 여러 채널을 섬길 수 있게 하는 것입니다. 구조체 맨 앞의 DINT는 오프셋 0이고, 그로부터 네 바이트 뒤의 REAL은 오프셋 4이며, 부울 태그에서는 오프셋이 바이트가 아니라 비트를 셉니다.
| 읽으려는 것 | 컨트롤러 태그 | 오프셋 | 데이터 형식 |
|---|---|---|---|
컨트롤러 범위의 DINT Counter |
Counter |
0 | Int32 |
Main에 있는 프로그램 범위의 DINT |
Program:Main.Counter |
0 | Int32 |
REAL 배열의 원소 Temps[2] |
Temps[2] |
0 | Float |
구조체 Recipe 안의 두 번째 DINT |
Recipe |
4 | Int32 |
Flags에 담긴 데이터의 비트 3 |
Flags |
3 | Boolean |
이름은 마침표까지 그대로 통째로 컨트롤러에 닿고, 같은 태그의 읽기와 쓰기는 같은 자리에 놓입니다. 그것이 Program:Main.Counter 같은 프로그램 범위 이름이 동작하는 이유입니다. 점으로 이어진 멤버 경로(MyUdt.Member)는 컨트롤러가 그 멤버를 이름으로 공개할 때 컨트롤러가 풀어냅니다. 공개하지 않을 때는 컨트롤러 범위의 기본 태그를 이름으로 부르고 바이트 오프셋으로 그 안에 닿으십시오. 이 방법은 언제나 동작합니다. 신호원 카드의 읽기 전용 신호원 주소 (버스) 줄은 편집하는 대로 조립된 주소를 보여 줍니다.
데이터 형식
원자적 CIP 형식은 모두 태그의 데이터 형식으로 쓸 수 있습니다.
| 데이터 형식 | CIP 형식 | 크기 |
|---|---|---|
| Boolean | BOOL | 비트 오프셋 자리의 1비트 |
| SByte | SINT | 1바이트 |
| Byte | USINT | 1바이트 |
| Int16 | INT | 2바이트 |
| UInt16 | UINT | 2바이트 |
| Int32 | DINT | 4바이트 |
| UInt32 | UDINT | 4바이트 |
| Int64 | LINT | 8바이트 |
| UInt64 | ULINT | 8바이트 |
| Float | REAL | 4바이트 |
| Double | LREAL | 8바이트 |
구조체와 UDT는 지원하지 않습니다. 위의 원자적 형식만 읽고 쓸 수 있으며, 그 안의 멤버에 닿기 위해 바이트 오프셋이 있는 것입니다. 문자열은 일부러 선택 목록에 없습니다. Logix STRING은 원자적 형식이 아니라 길이와 82바이트 배열로 이루어진 구조체이며, 드라이버는 그것을 읽지도 쓰지도 못합니다. 버스 위의 바이트 순서는 CIP 자신의 리틀 엔디언이며 저절로 처리됩니다. 바이트 순서 선택은 없습니다.
쓰기
접근이 읽기와 쓰기이거나 쓰기 전용인 태그는 쓸 수 있습니다. 쓰기는 컨트롤러 태그를 읽고, 주소가 가리키는 바이트(부울이면 주소가 가리키는 비트)를 바꾼 다음 되돌려 씁니다. 새 태그는 읽기 전용으로 시작합니다.
장치 검색
Connector의 장치 검색 단추는 이 컴퓨터가 붙어 있는 모든 네트워크에 CIP List Identity 요청을 브로드캐스트하고, 새 응답 없이 10초가 지날 때까지 계속 듣습니다. 스캔은 도는 동안 그 네트워크의 이름을 밝히므로, 결과가 0이어도 물음이 실제로 어디로 갔는지 알 수 있습니다. 가상 머신이나 WSL이나 VPN을 위한 가상 어댑터가 있는 스테이션은 운전자가 생각하는 것보다 네트워크가 많은 일이 흔하고, 후보가 그 가운데 하나에서 올 수도 있습니다.
요청을 실어 나를 수 없는 인터페이스는 건너뜁니다. 올라와 있지 않은 것, 루프백과 터널 어댑터, 그리고 DHCP에 아무도 답하지 않아 인터페이스가 스스로 붙인 주소(169.254.x.x)입니다. 컨트롤러 자신의 신원 응답인 답만 후보 장치가 되며, 이름은 eip:// 뒤에 그 주소를 붙인 것입니다. EtherNet/IP 포트에서 답하는 그 밖의 것은 무시되고 그 사실이 진단 로그에 남습니다. 후보마다 스캔은 이어서 컨트롤러 범위의 태그 목록을 읽고, 그 원자적 태그를 오프셋 0의 후보 채널로 내놓습니다.
장치 검색은 드라이버가 주기적으로 읽을 수 없는 것을 버립니다. 구조체와 UDT 태그(Logix STRING도 여기에 듭니다)는 버려지고, Program:과 Task:와 Map: 항목은 건너뜁니다. 이 컴퓨터가 붙어 있지 않은 네트워크의 컨트롤러는 브로드캐스트에 답하지 않습니다. 그런 것은 손으로 추가하십시오.
알아 두면 좋은 것
- 컨트롤러로 가는 모든 요청은 10초 뒤에 시간이 초과되고, 장치 검색이 듣는 창은 10초 동안 조용하면 닫힙니다.
- 드라이버는 컨트롤러 태그를 한 번만 열고 장치가 연결되어 있는 동안 계속 열어 둡니다. 그래서 태그가 수십 개인 컨트롤러도 이미 열어 둔 세션 위에서 읽히고, 읽을 때마다 열고 닫는 일은 없습니다. 실패한 읽기는 자기 태그를 놓아주고, 다음 읽기가 이름으로 다시 엽니다.
- Logix 프로젝트에서 태그 이름을 바꾸면 채널이 조용히 끊어집니다. 그때부터 태그는 설정된 이름이 다시 맞을 때까지 품질이 나쁜 것으로 읽힙니다.