기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
모드버스-RTU 프로토콜 어댑터
Modbus-RTU 프로토콜 어댑터 컴포넌트 (aws.greengrass.Modbus
) 는 로컬 Modbus RTU 장치의 정보를 폴링합니다.
이 컴포넌트를 사용하여 로컬 Modbus RTU 장치에 정보를 요청하려면 이 컴포넌트가 구독하는 주제에 메시지를 게시하십시오. 메시지에서 장치에 전송할 Modbus RTU 요청을 지정하십시오. 그런 다음 이 구성 요소는 Modbus RTU 요청 결과가 포함된 응답을 게시합니다.
참고
이 구성 요소는 V1의 Modbus RTU 프로토콜 어댑터 커넥터와 유사한 기능을 제공합니다. AWS IoT Greengrass 자세한 내용은 V1 개발자 안내서의 Modbus RTU 프로토콜 어댑터 커넥터를 참조하십시오. AWS IoT Greengrass
버전
이 컴포넌트의 버전은 다음과 같습니다.
-
2.1.x
-
2.0.x
유형
이 구성 요소는 Lambda 구성 요소 () 입니다. aws.greengrass.lambda
Greengrass 핵은 Lambda 런처 구성 요소를 사용하여 이 구성 요소의 Lambda 함수를 실행합니다.
자세한 설명은 구성 요소 유형 섹션을 참조하세요.
운영 체제
이 구성 요소는 Linux 코어 디바이스에만 설치할 수 있습니다.
요구 사항
이 구성 요소의 요구 사항은 다음과 같습니다.
-
코어 디바이스는 Lambda 함수를 실행하기 위한 요구 사항을 충족해야 합니다. 코어 디바이스에서 컨테이너화된 Lambda 함수를 실행하려면 해당 디바이스가 해당 요구 사항을 충족해야 합니다. 자세한 설명은 Lambda 함수 요구 사항 섹션을 참조하세요.
-
코어 디바이스에 설치되고 PATH 환경 변수에 추가된 Python
버전 3.7입니다. -
AWS IoT Greengrass 코어 디바이스와 Modbus 디바이스 간의 물리적 연결. 코어 장치는 USB 포트와 같은 직렬 포트를 통해 Modbus RTU 네트워크에 물리적으로 연결되어야 합니다.
-
이 컴포넌트로부터 출력 데이터를 받으려면 이 컴포넌트를 배포할 때 레거시 서브스크립션 라우터 컴포넌트 (
aws.greengrass.LegacySubscriptionRouter
) 에 대한 다음 구성 업데이트를 병합해야 합니다. 이 구성은 이 구성 요소가 응답을 게시하는 주제를 지정합니다.자세한 설명은 배포 만들기 섹션을 참조하세요.
-
Modbus-RTU 프로토콜 어댑터는 VPC에서 실행되도록 지원됩니다.
의존성
구성 요소를 배포할 때 호환되는 버전의 종속 AWS IoT Greengrass 항목도 배포합니다. 즉, 구성 요소를 성공적으로 배포하려면 구성 요소 및 해당 종속성에 대한 요구 사항을 모두 충족해야 합니다. 이 섹션에는 이 구성 요소의 릴리스된 버전에 대한 종속성과 각 종속성에 대한 구성 요소 버전을 정의하는 시맨틱 버전 제약 조건이 나열되어 있습니다. 콘솔에서 구성 요소의 각 버전에 대한 종속성을 볼 수도 있습니다. AWS IoT Greengrass
구성 요소 종속성에 대한 자세한 내용은 구성 요소 레시피 참조를 참조하십시오.
구성
이 구성 요소는 구성 요소를 배포할 때 사용자 지정할 수 있는 다음과 같은 구성 매개 변수를 제공합니다.
참고
이 구성 요소의 기본 구성에는 Lambda 함수 파라미터가 포함됩니다. 디바이스에서 이 구성 요소를 구성하려면 다음 파라미터만 편집하는 것이 좋습니다.
입력 데이터
이 구성 요소는 다음 주제에 대한 Modbus RTU 요청 파라미터를 수락하고 Modbus RTU 요청을 장치에 보냅니다. 기본적으로 이 컴포넌트는 로컬 게시/구독 메시지를 구독합니다. 사용자 정의 구성 요소에서 이 구성 요소에 메시지를 게시하는 방법에 대한 자세한 내용은 을 참조하십시오. 로컬 메시지 게시/구독
기본 주제 (로컬 게시/구독): modbus/adapter/request
메시지는 다음 속성을 허용합니다. 입력 메시지는 JSON 형식이어야 합니다.
request
-
전송할 Modbus RTU 요청에 대한 파라미터입니다.
요청 메시지의 모양은 해당 메시지가 나타내는 Modbus RTU 요청 유형에 따라 달라집니다. 모든 요청에는 다음 속성이 필요합니다.
다음 정보가
object
포함된 유형:operation
-
실행할 작업의 이름. 예를 들어, Modbus RTU 장치에서 코일을
ReadCoilsRequest
읽도록 지정합니다. 지원되는 작업에 대한 자세한 내용은 을 참조하십시오. Modbus RTU 요청 및 응답유형:
string
device
-
요청의 대상 디바이스입니다.
이 값은
0
~와247
사이의 정수여야 합니다.유형:
integer
요청에 포함할 다른 파라미터는 작업에 따라 다릅니다. 이 구성 요소는 순환 중복 검사 (CRC) 를 처리하여 데이터 요청을 확인합니다
. 참고
속성 포함을 요청하는 경우
address
속성 값을 정수로 지정해야 합니다. 예를 들어"address": 1
입니다. id
-
요청에 대한 임의의 ID입니다. 이 속성을 사용하여 입력 요청을 출력 응답에 매핑할 수 있습니다. 이 속성을 지정하면 구성 요소가 응답 개체의
id
속성을 이 값으로 설정합니다.유형:
string
예 입력 예: 코일 요청 읽기
{ "request": { "operation": "ReadCoilsRequest", "device": 1, "address": 1, "count": 1 }, "id": "MyRequest" }
출력 데이터
이 구성 요소는 기본적으로 응답을 다음 MQTT 주제에 출력 데이터로 게시합니다. 이 주제를 레거시 구독 라우터 구성 요소의 subject
구성에서 로 지정해야 합니다. 사용자 지정 구성 요소에서 이 항목의 메시지를 구독하는 방법에 대한 자세한 내용은 을 참조하십시오MQTT 메시지 게시/구독 AWS IoT Core.
기본 주제 (AWS IoT Core MQTT): modbus/adapter/response
응답 메시지의 모양은 요청 작업과 응답 상태에 따라 달라집니다. 예제는 예제 요청 및 응답 섹션을 참조하세요.
모든 응답에는 다음 속성이 포함됩니다.
response
-
모드버스 RTU 장치의 응답.
다음 정보가
object
포함된 유형:status
-
요청 상태입니다. 상태는 다음 값 중 하나일 수 있습니다.
-
Success
— 요청이 유효했고, 컴포넌트가 Modbus RTU 네트워크에 요청을 보냈고, Modbus RTU 네트워크가 응답을 반환했습니다. -
Exception
— 요청이 유효했고, 컴포넌트가 Modbus RTU 네트워크에 요청을 보냈고, Modbus RTU 네트워크에서 예외를 반환했습니다. 자세한 설명은 응답 상태: 예외 섹션을 참조하세요. -
No Response
— 요청이 유효하지 않아 구성 요소가 Modbus RTU 네트워크에 요청을 보내기 전에 오류가 발생했습니다. 자세한 설명은 응답 상태: 응답 없음 섹션을 참조하세요.
-
operation
-
구성 요소가 요청한 작업입니다.
device
-
구성 요소가 요청을 보낸 장치.
payload
-
모드버스 RTU 장치의 응답. 인
status
경우 이 객체에는 오류에 대한 설명이 있는error
속성 (예:) 만 포함됩니다.No Response
[Input/Output] No Response received from the remote unit
id
-
요청의 ID로, 어떤 응답이 어떤 요청에 해당하는지 식별하는 데 사용할 수 있습니다.
참고
쓰기 작업에 대한 응답은 단순히 요청의 에코일 뿐입니다. 쓰기 응답에는 의미 있는 정보가 포함되지 않지만 응답 상태를 확인하여 요청의 성공 또는 실패 여부를 확인하는 것이 좋습니다.
예 출력 예: 성공
{ "response" : { "status" : "success", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 1, "bits": [1] } }, "id" : "MyRequest" }
예 출력 예: 실패
{ "response" : { "status" : "fail", "error_message": "Internal Error", "error": "Exception", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 129, "exception_code": 2 } }, "id" : "MyRequest" }
더 많은 예제는 예제 요청 및 응답 단원을 참조하세요.
Modbus RTU 요청 및 응답
이 커넥터는 Modbus RTU 요청 파라미터를 입력 데이터로 수락하고 응답을 출력 데이터로 게시합니다.
지원되는 일반적인 작업은 다음과 같습니다.
요청 시 작업 이름 | 응답의 함수 코드 |
---|---|
ReadCoilsRequest | 01 |
ReadDiscreteInputsRequest | 02 |
ReadHoldingRegistersRequest | 03 |
ReadInputRegistersRequest | 04 |
WriteSingleCoilRequest | 05 |
WriteSingleRegisterRequest | 06 |
WriteMultipleCoilsRequest | 15 |
WriteMultipleRegistersRequest | 16 |
MaskWriteRegisterRequest | 22 |
ReadWriteMultipleRegistersRequest | 23 |
다음은 지원되는 작업에 대한 예제 요청 및 응답입니다.
- 읽기 코일
-
요청 예:
{ "request": { "operation": "ReadCoilsRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
응답 예:
{ "response": { "status": "success", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 1, "bits": [1] } }, "id" : "TestRequest" }
- 개별 입력 읽기
-
요청 예:
{ "request": { "operation": "ReadDiscreteInputsRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
응답 예:
{ "response": { "status": "success", "device": 1, "operation": "ReadDiscreteInputsRequest", "payload": { "function_code": 2, "bits": [1] } }, "id" : "TestRequest" }
- 홀딩 레지스터 읽기
-
요청 예:
{ "request": { "operation": "ReadHoldingRegistersRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
응답 예:
{ "response": { "status": "success", "device": 1, "operation": "ReadHoldingRegistersRequest", "payload": { "function_code": 3, "registers": [20,30] } }, "id" : "TestRequest" }
- 입력 레지스터 읽기
-
요청 예:
{ "request": { "operation": "ReadInputRegistersRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
- 단일 코일 쓰기
-
요청 예:
{ "request": { "operation": "WriteSingleCoilRequest", "device": 1, "address": 1, "value": 1 }, "id": "TestRequest" }
응답 예:
{ "response": { "status": "success", "device": 1, "operation": "WriteSingleCoilRequest", "payload": { "function_code": 5, "address": 1, "value": true } }, "id" : "TestRequest" }
- 단일 레지스터 작성
-
요청 예:
{ "request": { "operation": "WriteSingleRegisterRequest", "device": 1, "address": 1, "value": 1 }, "id": "TestRequest" }
- 여러 개의 코일 쓰기
-
요청 예:
{ "request": { "operation": "WriteMultipleCoilsRequest", "device": 1, "address": 1, "values": [1,0,0,1] }, "id": "TestRequest" }
응답 예:
{ "response": { "status": "success", "device": 1, "operation": "WriteMultipleCoilsRequest", "payload": { "function_code": 15, "address": 1, "count": 4 } }, "id" : "TestRequest" }
- 다중 레지스터 작성
-
요청 예:
{ "request": { "operation": "WriteMultipleRegistersRequest", "device": 1, "address": 1, "values": [20,30,10] }, "id": "TestRequest" }
응답 예:
{ "response": { "status": "success", "device": 1, "operation": "WriteMultipleRegistersRequest", "payload": { "function_code": 23, "address": 1, "count": 3 } }, "id" : "TestRequest" }
- 마스크 쓰기 레지스터
-
요청 예:
{ "request": { "operation": "MaskWriteRegisterRequest", "device": 1, "address": 1, "and_mask": 175, "or_mask": 1 }, "id": "TestRequest" }
응답 예:
{ "response": { "status": "success", "device": 1, "operation": "MaskWriteRegisterRequest", "payload": { "function_code": 22, "and_mask": 0, "or_mask": 8 } }, "id" : "TestRequest" }
- 다중 레지스터 읽기, 쓰기
-
요청 예:
{ "request": { "operation": "ReadWriteMultipleRegistersRequest", "device": 1, "read_address": 1, "read_count": 2, "write_address": 3, "write_registers": [20,30,40] }, "id": "TestRequest" }
응답 예:
{ "response": { "status": "success", "device": 1, "operation": "ReadWriteMultipleRegistersRequest", "payload": { "function_code": 23, "registers": [10,20,10,20] } }, "id" : "TestRequest" }
참고
응답에는 컴포넌트가 읽는 레지스터가 포함됩니다.
요청 형식이 올바르지만 요청이 성공적으로 완료되지 않으면 예외가 발생합니다. 이 경우 응답에는 다음 정보가 포함됩니다.
-
status
는Exception
으로 설정됩니다. -
function_code
는 요청의 코드 함수 + 128과 같습니다. -
exception_code
에는 예외 코드가 포함되어 있습니다. 자세한 내용은 Modbus 예외 코드를 참조하십시오.
예:
{ "response": { "status": "fail", "error_message": "Internal Error", "error": "Exception", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 129, "exception_code": 2 } }, "id": "TestRequest" }
이 커넥터는 Modbus 요청에 대해 확인 점검을 수행합니다. 예를 들어 잘못된 형식과 누락된 필드가 있는지 점검합니다. 확인이 실패하면 커넥터는 요청을 전송하지 않습니다. 그 대신 다음 정보가 포함된 응답을 반환합니다.
-
status
는No Response
으로 설정됩니다. -
error
에는 오류 이유가 포함되어 있습니다. -
error_message
에는 오류 메시지가 포함되어 있습니다.
예제:
{ "response": { "status": "fail", "error_message": "Invalid address field. Expected <type 'int'>, got <type 'str'>", "error": "No Response", "device": 1, "operation": "ReadCoilsRequest", "payload": { "error": "Invalid address field. Expected Expected <type 'int'>, got <type 'str'>" } }, "id": "TestRequest" }
요청이 존재하지 않는 디바이스를 대상으로 하거나 Modbus RTU 네트워크가 작동하지 않는 경우 응답 없음 형식을 사용하는 ModbusIOException
가 발생할 수 있습니다.
{ "response": { "status": "fail", "error_message": "[Input/Output] No Response received from the remote unit", "error": "No Response", "device": 1, "operation": "ReadCoilsRequest", "payload": { "error": "[Input/Output] No Response received from the remote unit" } }, "id": "TestRequest" }
로컬 로그 파일
이 구성 요소는 다음 로그 파일을 사용합니다.
/logs/aws.greengrass.Modbus.log
/greengrass/v2
이 구성 요소의 로그를 보려면
-
코어 기기에서 다음 명령을 실행하여 이 구성 요소의 로그 파일을 실시간으로 확인합니다. AWS IoT Greengrass 루트 폴더
경로로 바꾸십시오./greengrass/v2
sudo tail -f
/logs/aws.greengrass.Modbus.log/greengrass/v2
라이선스
이 구성 요소에는 다음과 같은 타사 소프트웨어/라이선스가 포함됩니다.
-
페이시리얼/BSD
라이선스
이 구성 요소는 Greengrass Core 소프트웨어 라이센스
Changelog
다음 표에는 각 구성 요소 버전의 변경 사항이 설명되어 있습니다.
버전 |
변경 |
---|---|
2.1.8 |
그린그래스 뉴클리어스 버전 2.12.0 릴리스를 위해 버전이 업데이트되었습니다. |
2.1.7 |
그린그래스 뉴클리어스 버전 2.11.0 릴리스를 위해 버전이 업데이트되었습니다. |
2.1.6 |
그린그래스 뉴클리어스 버전 2.10.0 릴리스를 위해 버전이 업데이트되었습니다. |
2.1.5 |
|
2.1.4 |
Greengrass 뉴클리어스 버전 2.9.0 릴리스를 위해 버전이 업데이트되었습니다. |
2.1.3 |
Greengrass 뉴클리어스 버전 2.8.0 릴리스를 위해 버전이 업데이트되었습니다. |
2.1.2 |
Greengrass 뉴클리어스 버전 2.7.0 릴리스를 위해 버전이 업데이트되었습니다. |
2.1.1 |
Greengrass 뉴클리어스 버전 2.6.0 릴리스를 위해 버전이 업데이트되었습니다. |
2.1.0 |
|
2.0.8 |
Greengrass 뉴클리어스 버전 2.5.0 릴리스를 위해 버전이 업데이트되었습니다. |
2.0.7 |
그린그래스 뉴클리어스 버전 2.4.0 릴리스를 위해 버전이 업데이트되었습니다. |
2.0.6 |
그린그래스 뉴클리어스 버전 2.3.0 릴리스를 위해 버전이 업데이트되었습니다. |
2.0.5 |
Greengrass 뉴클리어스 버전 2.2.0 릴리스를 위해 버전이 업데이트되었습니다. |
2.0.4 |
그린그래스 뉴클리어스 버전 2.1.0 릴리스에 대한 버전이 업데이트되었습니다. |
2.0.3 |
초기 버전 |