Siemens S7
S7comm으로 Siemens S7 PLC에 접속합니다. 랙과 슬롯, 메모리 영역, 형식 있는 바이트와 비트 주소 지정, 그리고 고유 데이터 형식.
Siemens S7 드라이버는 ISO-on-TCP 위에 실리는 고전적인 Step 7 프로토콜인 S7comm으로 Siemens S7 PLC와 이야기합니다. 절대 주소 지정, 곧 메모리 영역과 데이터 블록 번호와 바이트와 비트를 쓰므로, 엔지니어링 프로젝트에서 심벌을 내보내지 않아도 동작합니다. Connector에서 Siemens S7 드라이버 아래에 장치를 추가하고 아래 칸을 채우십시오. 패널은 이 프로토콜이 쓰는 칸만 보여 줍니다.
연결
| 칸 | 뜻 | 기본값 |
|---|---|---|
| 호스트 | CPU(또는 그 앞에 놓인 CP 모듈)의 IP 주소나 호스트 이름. | 비어 있음 |
| 랙 / 슬롯 | Siemens 하드웨어 구성에 설정된 대로의 CPU 랙 번호와 슬롯 번호입니다. 한 줄에 놓인 숫자 상자 둘이며, 앞이 랙, 뒤가 슬롯입니다. | 0 / 0 |
| 읽기 주기 (ms) | 스스로 값을 정하지 않은 태그에 적용되는 장치 전체의 읽기 주기. | 1,000 |
TCP 포트는 102(ISO-on-TCP)로 고정이므로 포트 칸이 없습니다. 장치 머리글은 조립된 엔드포인트를 보여 줍니다. 예를 들어 s7://192.168.0.2:0:1(호스트, 랙, 슬롯)입니다.
랙과 슬롯은 하드웨어와 맞아야 합니다. S7-1200과 S7-1500 CPU는 랙 0, 슬롯 0이나 1에서 답하고, 흔한 S7-300 CPU는 랙 0, 슬롯 2에 있으며, S7-400의 랙은 구성에 따라 다릅니다. 슬롯이 틀리면 잘못된 데이터를 읽는 것이 아니라 연결이 실패합니다.
태그마다 자기 읽기 주기 (ms)를 정할 수 있으며, 태그 값이 0이면 장치의 주기로 되돌아갑니다.
주소 지정
S7 태그의 주소는 자유 입력 문자열이 아니라 형식 있는 칸으로 적습니다. 패널은 태그의 신호원 카드에 이 칸들을 보여 줍니다.
| 칸 | 뜻 | 받는 값 | 기본값 |
|---|---|---|---|
| 영역 | 읽을 메모리 영역. | DataBlock, Merker, ProcessInput, ProcessOutput, Timer, Counter |
DataBlock |
| DB 번호 | 어느 데이터 블록인지이며, 영역이 DataBlock일 때에만 나옵니다. |
0 이상 | 1 |
| 시작 바이트 | 값이 시작되는 영역 안의 바이트 위치입니다. Timer와 Counter 영역에서는 상자의 이름이 타이머 번호나 카운터 번호가 되고, 대신 타이머나 카운터의 번호를 묻습니다. |
0 이상 | 0 |
| 비트 (0~7) | 시작 바이트 안의 비트 위치입니다. 부울 태그에만 나옵니다. | 0~7 | 0 |
| 최대 길이 (비우면 254) | 선언된 S7 STRING의 최대 길이입니다. Timer와 Counter 영역 밖의 문자열 태그에만 나옵니다. |
1 이상, 또는 비움 | 비어 있음 |
영역은 흔히 쓰는 Siemens 표기와 대응합니다. Merker는 플래그 메모리(M), ProcessInput은 프로세스 이미지 입력(I/E), ProcessOutput은 프로세스 이미지 출력(Q/A)이고, Timer와 Counter는 S7의 타이머와 카운터 영역입니다. 타이머와 카운터의 주소는 바이트가 아니라 번호로 적습니다. Timer에 번호 5를 적으면 T5를 읽고, Counter에 번호 3을 적으면 C3을 읽습니다. 고전적인 절대 주소를 옮기면 이렇습니다.
| 고전적인 주소 | 데이터 형식 | 입력할 칸 |
|---|---|---|
REAL을 담은 DB5.DBD12 |
Float | 영역 DataBlock, DB 번호 5, 시작 바이트 12 |
DB1.DBX3.4 |
Boolean | 영역 DataBlock, DB 번호 1, 시작 바이트 3, 비트 4 |
INT를 담은 DB2.DBW20 |
Int16 | 영역 DataBlock, DB 번호 2, 시작 바이트 20 |
MW10 |
Int16 | 영역 Merker, 시작 바이트 10 |
M10.3 |
Boolean | 영역 Merker, 시작 바이트 10, 비트 3 |
IB2 |
Byte | 영역 ProcessInput, 시작 바이트 2 |
Q4.1 |
Boolean | 영역 ProcessOutput, 시작 바이트 4, 비트 1 |
T5 |
Int16 | 영역 Timer, 타이머 번호 5 |
C3 |
Int16 | 영역 Counter, 카운터 번호 3 |
부울 태그는 버스에서 정확히 비트 하나를 읽고 쓰며, 둘레의 바이트를 결코 다시 쓰지 않습니다. 그 밖의 모든 형식은 시작 바이트에서 자기 데이터 형식의 정확한 너비만큼 바이트 단위로 주소가 매겨집니다. 신호원 카드의 읽기 전용 신호원 주소 (버스) 줄은 편집하는 대로 조립된 주소를 보여 줍니다.
데이터 형식
태그의 데이터 형식이 버스 위의 S7 고유 형식을 정합니다. S7 고유 너비 열세 가지를 모두 쓸 수 있습니다.
| 데이터 형식 | S7 형식 | 버스 위 크기 |
|---|---|---|
| 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바이트 |
| String | STRING | 최대 길이 + 2바이트 |
| DateTime | DTL | 12바이트 |
여러 바이트로 이루어진 값은 S7 고유의 빅 엔디언 바이트 순서를 저절로 씁니다. 바이트 순서 선택이 없는 것은 필요하지 않기 때문입니다.
문자열 태그는 표준 S7 STRING 배치를 읽습니다. 선언된 최대 길이 1바이트, 현재 길이 1바이트, 그다음 ASCII 문자입니다. 최대 길이는 블록의 STRING 선언과 맞아야 하며(비우면 S7의 최대인 254입니다), 드라이버는 읽을 때마다 최대 길이 + 2바이트를 옮깁니다. DateTime 태그는 S7-1200/1500 계열의 DTL 구조체(연도부터 나노초까지)와 대응합니다. 예전의 8바이트 DATE_AND_TIME은 제시되지 않습니다.
쓰기
접근이 읽기와 쓰기이거나 쓰기 전용인 태그는 쓸 수 있습니다. 쓰기는 읽기와 같은 영역과 바이트와 비트를 가리킵니다. 부울 쓰기는 자기 비트 하나를 정하고, 그 밖의 것은 형식의 정확한 바이트를 씁니다. 새 태그는 읽기 전용으로 시작합니다.
장치 검색
S7comm에는 브로드캐스트 검색이 없으므로 Connector는 이 드라이버에 장치 검색 단추를 보여 주지 않습니다. 장치와 태그는 손으로 추가하십시오.
알아 두면 좋은 것
- S7-1200/1500 CPU에서 S7comm의 절대 주소 지정을 쓰려면 Siemens 프로젝트에서 두 가지를 설정해야 합니다. CPU의 PUT/GET 통신으로 접근 허용과, 주소를 매기는 모든 데이터 블록의 최적화된 블록 접근 끄기입니다. 최적화된 DB에는 주소를 매길 바이트 위치가 없습니다.
- Timer와 Counter 영역은 바이트 위치가 아니라 번호로 주소를 매깁니다. 상자는 타이머나 카운터 자체를 묻습니다(T0, T1, T2와 C0, C1, C2). 값 하나가 16비트 워드 하나이므로 Int16과 짝지으십시오. 그보다 넓거나 좁은 데이터 형식은 거부되고 태그 이름이 진단 로그에 남으며, 그 장치의 다른 태그는 계속 읽힙니다.
- 닿지 않는 PLC는 시작할 때 아무 비용도 들이지 않습니다. 장치는 배경에서 계속 다시 시도하고, 연결이 이루어질 때까지 그 태그는 품질이 나쁜 것으로 읽힙니다.
- 장치가 온라인이 된 뒤에 뽑힌 케이블은 다음 읽기에서 알아차립니다. 장치는 오프라인이 되고 그 태그의 품질은 나빠지며, 네트워크가 돌아오면 스스로 다시 연결합니다. CPU가 거부하는 주소는 그렇게 하지 않으므로, 잘못 입력한 태그 하나가 그 장치의 나머지를 함께 끌어내리는 일은 결코 없습니다.