Modbus RTU
시리얼 버스 위의 Modbus이며, 물리 회선을 따로 모델로 두고 슬레이브 주소를 가진 장치들이 그 회선을 함께 씁니다.
Modbus RTU 드라이버는 시리얼 버스 위의 Modbus 장치와 이야기합니다. RS-485나 RS-232이며, 물리 COM 포트나 USB 어댑터나 가상 포트 또는 전달된 포트로 닿습니다. 버스를 물리적으로 함께 쓰기 때문에 구조는 드라이버 > 회선 > 장치 > 태그입니다. 회선이 전기적인 것을 모두 가지고(포트, 보드레이트, 형식, 타이밍), 그 위의 장치는 자기 슬레이브 주소와 읽기 주기와 태그만 가집니다.
시리얼 회선
| 칸 | 뜻 | 기본값 |
|---|---|---|
| 이름 | 버스를 부르는 이름입니다. 언제든 고칠 수 있습니다. | 필수 |
| 시리얼 포트 | 운영 체제의 포트이며 예를 들어 COM3입니다. 이 칸은 자유 입력이어서 물리 포트도 가상 포트도 전달된 포트도 모두 동작하고, 옆의 화살표는 Windows가 지금 찾아낸 포트를 내놓습니다(어댑터를 꽂고 뺄 때를 위한 새로 고침이 함께 있습니다). 찾아낸 목록은 편의를 위한 것이지 허용 목록이 아닙니다. |
COM1 |
| 보드레이트 | 버스의 모든 장치가 함께 쓰는 비트 전송률. | 9600 |
| 시리얼 형식 | 8N1, 8N2, 8E1, 8E2, 8O1, 8O2 가운데 고르는 닫힌 선택입니다. 숫자는 데이터 비트, 글자는 패리티(N은 없음, E는 짝수, O는 홀수), 마지막 숫자는 정지 비트입니다. 다른 너비와 마크/스페이스 패리티와 1.5 정지 비트는 지원하지 않습니다. |
8E1 |
| 응답 제한 시간 (ms) | 슬레이브 하나의 응답을 기다리는 최대 시간이며 100에서 60,000까지입니다. 제한 시간을 길게 두면 느린 장비를 받아들일 수 있지만, 응답 없는 슬레이브를 가려내는 일과 장치 검색이 느려집니다. | 1000 |
| 최소 트랜잭션 간격 (ms) | 회선 전체에 적용되는 호환용 속도 맞춤이며 0에서 1000까지입니다. 0은 프로토콜이 저절로 두는 침묵만 남기고, 양수는 그 침묵을 늘릴 뿐 결코 줄이지 않습니다. | 0 |
프로토콜 자체가 프레임 사이의 침묵을 요구하며, 회선은 언제나 그것을 지킵니다. 19,200 보드 이하에서는 설정된 형식으로 계산한 3.5문자 시간이 자동 침묵이고, 19,200 보드보다 빠르면 규격이 권하는 고정 1.75 ms입니다. 실제 적용되는 침묵은 그 자동 하한과 설정한 간격 가운데 큰 쪽이며 결코 둘의 합이 아닙니다. 패널은 두 값을 모두 보여 줍니다. 간격을 올리는 일은 회선 위의 모든 슬레이브를 일부러 느리게 만드는 일입니다. 이것은 호환을 돕는 수단이지 배선, 종단, 접지, 잡음을 고치는 수단이 아닙니다.
새 회선은 꺼진 채로 시작하므로 물리 설정을 먼저 정할 수 있습니다. 물리 포트 하나는 많아야 회선 하나에 속하며, 대소문자를 구별하지 않고 회선이 꺼져 있을 때에도 그렇습니다. 이름과 트랜잭션 간격은 회선이 도는 동안에도 고칠 수 있고(타이밍을 고치면 포트를 다시 열지 않고 적용됩니다), 포트와 보드레이트와 형식과 응답 제한 시간은 회선이 켜져 있는 동안 잠깁니다. 먼저 끄고 저장하십시오. 회선을 끄면 그 모든 장치의 통신이 멈추지만 장치 각자의 사용 선택은 바뀌지 않습니다.
회선은 물리 전송 계층을 자기 장치들과 따로 보고합니다. 꺼짐, 대기(켜진 장치 없음), 연결하는 중, 온라인, 또는 진단이 붙은 포트 오류입니다. 비어 있는 회선을 지우면 회선만 없어지고, 장치를 담고 있는 회선을 지우면 확인을 따로 묻고 그 장치와 태그까지 함께 지웁니다.
장치
| 칸 | 뜻 | 기본값 |
|---|---|---|
| 시리얼 회선 | 고정입니다. 장치는 자기 회선 아래에 만들어지고 물리적 조합을 물려받으며, 패널에 읽기 전용으로 나옵니다. 장치는 두려는 회선 아래에 추가하십시오. | 없음 |
| 슬레이브 ID | 버스 위 그 장치의 Modbus 주소이며 1에서 247까지, 회선 안에서 고유해야 합니다(꺼진 장치도 셉니다). | 1 |
| 읽기 주기 (ms) | 스스로 값을 정하지 않은 태그의 기본 읽기 주기. | 1000 |
내부 런타임 주소는 modbus+rtu://<line-id>/<port>/<baud>/<format>/<timeout>/<unitId>/<interval>입니다. 회선의 변하지 않는 신원과 물리 설정 전체를 담으며, 부르는 이름은 결코 담지 않습니다.
회선을 함께 쓰는 동작
드라이버는 회선마다 시리얼 세션 하나를 열고 모든 장치의 모든 요청을 하나의 배분기로 차례를 세우므로, 버스 위에서 읽기와 쓰기가 겹치는 일은 없습니다. 기다리는 쓰기는 한도가 있는 우선권으로 다음 빈 차례를 잡습니다. 쓰기는 빠르게 처리되지만, 계속 쓴다고 해서 주기적 읽기를 굶길 수는 없습니다. 슬레이브마다 시간 초과가 따로 관리되고 점점 늘어나는 물러섬이 적용되므로, 조용한 장치 하나는 자기만 느려집니다. CRC가 맞는 Modbus 예외는 그 태그에 대한 요청 하나의 오류일 뿐이며 회선은 건강한 채로 있습니다. 물리적인 I/O 실패(포트가 사라지거나 어댑터가 빠지는 일)만이 함께 쓰는 세션을 무효로 만들고, 회선 전체를 위한 한 번의 조율된 다시 열기를 시작합니다. 마지막으로 놓아 주는 장치가 포트를 닫습니다.
태그 주소 지정
태그 주소 지정은 Modbus TCP와 같습니다. 레지스터 종류(HoldingRegister, InputRegister, Coil, DiscreteInput이며 기본값은 태그의 형식과 접근에서 이끌어 냅니다), 0부터 세는 레지스터 번호, 자동으로 정해지는 개수(부울 1레지스터, Int32와 Float 2, 문자열 4이며, 그 밖의 너비는 모두 고정이므로 상자는 문자열 태그에만 그려집니다), 그리고 서로 독립된 두 바이트 순서 상자이며 둘 다 기본값은 최상위 먼저입니다. 지원하는 값 형식도 같은 넷(Boolean, Int32, Float, String)이고, 읽기와 쓰기의 기능 코드와 네 가지 버스 배치는 Modbus TCP 페이지에 적혀 있으며 여기에서도 그대로 적용됩니다.
장치 검색
장치 검색은 이미 있는 회선 위에서 슬레이브 ID 범위를 탐색하며, 그 회선의 패널에 있습니다.
| 칸 | 뜻 | 기본값 |
|---|---|---|
| 시작 슬레이브 ID | 탐색을 시작할 슬레이브 id이며 1에서 247까지입니다. | 1 |
| 끝 슬레이브 ID | 마지막 슬레이브 id이며 시작보다 커야 합니다. | 32 |
스캔은 회선에 저장된 물리 설정을 다시 읽고 포트를 한 번 연 다음, Read Basic Device Identification(기능 43/14)으로 범위를 차례대로 탐색하며, 회선에 실제로 적용되는 프레임 사이 침묵으로 탐색마다 속도를 맞춥니다. 설정 조합을 이것저것 시도하지 않고 레지스터를 읽지도 않습니다. CRC가 맞는 Modbus 예외는 신원을 주장하지 않고도 그 슬레이브가 있다는 것을 증명하지만, 시간 초과나 올바르지 않은 프레임은 증명하지 못합니다.
사용 중인 회선은 결코 끊기거나 저절로 껐다 켜지지 않습니다. 스캔하기 전에 직접 끄고, 끝난 뒤에도 직접 다시 켜십시오. 취소하면 시리얼 세션이 닫히고, 이미 보이던 결과는 사용자가 명시적으로 추가할 때까지 스쳐 가는 후보로 남습니다. 이미 설정된 슬레이브 id에는 그렇다는 표시가 붙고, 중복을 만드는 대신 있던 장치를 엽니다. 결과에는 태그가 없습니다. 레지스터는 추가한 뒤에 설정합니다.
장치 검색과 회선 구성은 물리 포트마다 하나뿐인, 빠르게 실패하는 예약을 함께 씁니다. 그래서 스캔과 설정 변경이 포트를 두고 다툴 수 없습니다. 진 쪽은 어느 작업이 포트를 잡고 있는지 듣습니다.
알아 둘 만한 한계
- 이 네 값 형식이 버스 코덱이 가진 어휘 전부입니다. 넓은 정수와 Double은 제시되지 않습니다.
- 처리량은 버스의 성질입니다. 회선 위의 모든 장치가 하나의 요청 흐름을 함께 쓰고 그 흐름은 실제 적용되는 프레임 사이 침묵으로 속도가 맞춰지므로, 장치가 많거나 간격을 올리면 모든 읽기 주기가 길어집니다.