AWS IoT Greengrass Version 1 memasuki fase umur panjang pada 30 Juni 2023. Untuk informasi selengkapnya, lihat kebijakan AWS IoT Greengrass V1 pemeliharaan. Setelah tanggal ini, tidak AWS IoT Greengrass V1 akan merilis pembaruan yang menyediakan fitur, penyempurnaan, perbaikan bug, atau patch keamanan. Perangkat yang berjalan AWS IoT Greengrass V1 tidak akan terganggu dan akan terus beroperasi dan terhubung ke cloud. Kami sangat menyarankan Anda bermigrasi ke AWS IoT Greengrass Version 2, yang menambahkan fitur baru yang signifikan dan dukungan untuk platform tambahan.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Konektor Adaptor Protokol Modbus-RTU
Konektor Adaptor Protokol Modbus-RTU memungut informasi dari perangkat Modbus RTU yang ada dalam grup. AWS IoT Greengrass
Konektor ini menerima parameter untuk permintaan Modbus RTU dari fungsi Lambda yang ditetapkan pengguna. Ini mengirimkan permintaan yang sesuai, dan kemudian menerbitkan respon dari perangkat target sebagai pesan MQTT.
Konektor ini memiliki versi berikut.
Versi |
ARN |
---|---|
3 |
|
2 |
|
1 |
|
Untuk informasi tentang perubahan versi, lihat Changelog.
Persyaratan
Konektor ini memiliki persyaratan sebagai berikut:
-
AWS IoT Greengrass Perangkat lunak inti v1.9.3 atau yang lebih baru.
-
Python
versi 3.7 atau 3.8 diinstal pada perangkat core dan ditambahkan ke variabel lingkungan PATH. catatan
Untuk menggunakan Python 3.8, jalankan perintah berikut untuk membuat link simbolik dari folder instalasi default Python 3.7 ke binari Python 3.8 yang diinstal.
sudo ln -s
path-to-python-3.8
/python3.8 /usr/bin/python3.7Ini mengonfigurasi perangkat Anda untuk memenuhi persyaratan Python untuk AWS IoT Greengrass.
-
Koneksi fisik antara AWS IoT Greengrass inti dan perangkat Modbus. Core harus terhubung secara fisik ke jaringan Modbus RTU melalui port serial; sebagai contoh port USB.
-
Sebuah sumber daya perangkat lokal dalam grup Greengrass yang menunjuk ke port serial Modbus fisik.
-
Sebuah fungsi Lambda yang ditetapkan pengguna yang mengirimkan Modbus RTU permintaan parameter untuk konektor ini. Parameter permintaan harus sesuai dengan pola yang diharapkan dan menyertakan IDs dan alamat perangkat target pada jaringan Modbus RTU. Untuk informasi selengkapnya, lihat Data input.
Parameter Konektor
Konektor ini mendukung parameter berikut:
ModbusSerialPort-ResourceId
-
ID sumber daya perangkat lokal yang mewakili fisik Modbus serial port.
catatan
Konektor ini diberikan akses baca-tulis ke sumber daya.
Nama tampilan di AWS IoT konsol: Sumber daya port serial Modbus
Wajib:
true
Jenis:
string
Pola yang valid:
.+
ModbusSerialPort
-
Jalur absolut ke port serial Modbus fisik pada perangkat. Ini adalah jalur sumber daya yang ditentukan untuk sumber daya perangkat lokal Modbus.
Nama tampilan di AWS IoT konsol: Jalur sumber sumber daya port serial Modbus
Wajib:
true
Jenis:
string
Pola yang valid:
.+
Buat Contoh Konektor (AWS CLI)
Perintah CLI berikut membuat ConnectorDefinition
dengan versi awal yang berisi konektor Adaptor Protokol Modbus-RTU.
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
"Connectors": [
{
"Id": "MyModbusRTUProtocolAdapterConnector",
"ConnectorArn": "arn:aws:greengrass:region
::/connectors/ModbusRTUProtocolAdapter/versions/3",
"Parameters": {
"ModbusSerialPort-ResourceId": "MyLocalModbusSerialPort",
"ModbusSerialPort": "/path-to-port
"
}
}
]
}'
catatan
Fungsi Lambda dalam konektor mempunyai siklus hidup yang berumur panjang ini.
Di AWS IoT Greengrass konsol, Anda dapat menambahkan konektor dari halaman Konektor grup. Untuk informasi selengkapnya, lihat Memulai dengan konektor Greengrass (konsol).
catatan
Setelah Anda menggunakan konektor Adaptor Protokol Modbus-RTU, Anda dapat menggunakan AWS IoT Things Graph untuk mengatur interaksi antar perangkat dalam grup Anda. Untuk informasi lebih lanjut, lihat Modbus dalam AWS IoT Things Graph Panduan Pengguna.
Data input
Konektor ini menerima permintaan parameter Modbus RTU dari fungsi Lambda yang ditetapkan pengguna pada topik MQTT. Pesan input harus dalam format JSON.
- Filter topik dalam langganan
-
modbus/adapter/request
- Properti pesan
-
Pesan permintaan bervariasi berdasarkan jenis permintaan Modbus RTU yang diwakilinya. Properti berikut diperlukan untuk semua permintaan:
-
Di
request
objek:-
operation
. Nama operasi untuk mengeksekusi. Sebagai contoh, tentukan"operation": "ReadCoilsRequest"
untuk membaca koil. Nilai ini harus string Unicode. Untuk operasi yang didukung, lihat Permintaan dan tanggapan Modbus RTU. -
device
. Perangkat target permintaan. Nilai ini harus berada dalam antara0 - 247
.
-
-
Properti
id
ini. ID untuk permintaan. Nilai ini digunakan untuk deduplikasi data dan dikembalikan seperti dalam propertiid
dari semua respon, termasuk respon kesalahan. Nilai ini harus string Unicode.
catatan
Jika permintaan Anda mencakup bidang alamat, Anda harus menentukan nilai sebagai bilangan bulat. Misalnya,
"address": 1
.Parameter lain untuk memasukkan dalam permintaan tergantung pada operasi. Semua parameter permintaan diperlukan kecuali CRC, yang ditangani secara terpisah. Sebagai contoh, lihat Contoh permintaan dan respons.
-
- Contoh masukan: Baca permintaan kumparan
-
{ "request": { "operation": "ReadCoilsRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
Data output
Konektor ini menerbitkan tanggapan atas permintaan Modbus RTU yang masuk.
- Filter topik dalam langganan
-
modbus/adapter/response
- Properti pesan
-
Format pesan respon bervariasi berdasarkan permintaan yang sesuai dan status respon. Sebagai contoh, lihat Contoh permintaan dan respons.
catatan
Sebuah respon untuk operasi menulis hanyalah gema dari permintaan. Meskipun tidak ada informasi yang berarti dikembalikan untuk menulis tanggapan, itu adalah praktik yang baik untuk memeriksa status respon.
Setiap respon mencakup properti berikut:
Di
response
objek:-
status
. Status permintaan. Status dapat menjadi salah satu dari nilai-nilai yang berikut:-
Success
. Permintaan itu valid, dikirim ke jaringan Modbus RTU, dan tanggapan dikembalikan. -
Exception
. Permintaan itu valid, dikirim ke jaringan Modbus RTU, dan respon pengecualian dikembalikan. Untuk informasi selengkapnya, lihat Status respon: Pengecualian. -
No Response
. Permintaan tidak valid, dan konektor menangkap kesalahan sebelum permintaan dikirim melalui jaringan Modbus RTU. Untuk informasi selengkapnya, lihat Status respon: Tidak ada respon.
-
-
device
. Perangkat yang permintaan dikirim ke. -
operation
. Jenis permintaan yang dikirim. -
payload
. Isi respon yang dikembalikan. Jikastatus
adalahNo Response
, objek ini hanya berisi sebuaherror
properti dengan deskripsi kesalahan (sebagai contoh,"error": "[Input/Output] No Response received from the remote unit"
).
-
Properti
id
ini. ID permintaan, digunakan untuk deduplikasi data.
- Contoh keluaran: Sukses
-
{ "response" : { "status" : "success", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 1, "bits": [1] } }, "id" : "TestRequest" }
- Contoh keluaran: Kegagalan
-
{ "response" : { "status" : "fail", "error_message": "Internal Error", "error": "Exception", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 129, "exception_code": 2 } }, "id" : "TestRequest" }
Untuk contoh lainnya, lihat Contoh permintaan dan respons.
Permintaan dan tanggapan Modbus RTU
Konektor ini menerima parameter permintaan Modbus RTU sebagai data input dan menerbitkan tanggapan sebagai data output.
Operasi umum berikut ini didukung.
Nama operasi dalam permintaan | Kode fungsi dalam respons |
---|---|
ReadCoilsRequest | 01 |
ReadDiscreteInputsRequest | 02 |
ReadHoldingRegistersRequest | 03 |
ReadInputRegistersRequest | 04 |
WriteSingleCoilRequest | 05 |
WriteSingleRegisterRequest | 06 |
WriteMultipleCoilsRequest | 15 |
WriteMultipleRegistersRequest | 16 |
MaskWriteRegisterRequest | 22 |
ReadWriteMultipleRegistersRequest | 23 |
Berikut ini adalah contoh permintaan dan tanggapan untuk operasi yang didukung.
- Baca Koil
Contoh permintaan:
{ "request": { "operation": "ReadCoilsRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
Contoh respons:
{ "response": { "status": "success", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 1, "bits": [1] } }, "id" : "TestRequest" }
- Baca Input Diskrit
Contoh permintaan:
{ "request": { "operation": "ReadDiscreteInputsRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
Contoh respons:
{ "response": { "status": "success", "device": 1, "operation": "ReadDiscreteInputsRequest", "payload": { "function_code": 2, "bits": [1] } }, "id" : "TestRequest" }
- Baca Register Holding
Contoh permintaan:
{ "request": { "operation": "ReadHoldingRegistersRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
Contoh respons:
{ "response": { "status": "success", "device": 1, "operation": "ReadHoldingRegistersRequest", "payload": { "function_code": 3, "registers": [20,30] } }, "id" : "TestRequest" }
- Baca Register Input
Contoh permintaan:
{ "request": { "operation": "ReadInputRegistersRequest", "device": 1, "address": 1, "value": 1 }, "id": "TestRequest" }
- Tulis Kumparan Tunggal
Contoh permintaan:
{ "request": { "operation": "WriteSingleCoilRequest", "device": 1, "address": 1, "value": 1 }, "id": "TestRequest" }
Contoh respons:
{ "response": { "status": "success", "device": 1, "operation": "WriteSingleCoilRequest", "payload": { "function_code": 5, "address": 1, "value": true } }, "id" : "TestRequest"
- Menulis Register Tunggal
Contoh permintaan:
{ "request": { "operation": "WriteSingleRegisterRequest", "device": 1, "address": 1, "value": 1 }, "id": "TestRequest" }
- Tulis Banyak Koil
Contoh permintaan:
{ "request": { "operation": "WriteMultipleCoilsRequest", "device": 1, "address": 1, "values": [1,0,0,1] }, "id": "TestRequest" }
Contoh respons:
{ "response": { "status": "success", "device": 1, "operation": "WriteMultipleCoilsRequest", "payload": { "function_code": 15, "address": 1, "count": 4 } }, "id" : "TestRequest" }
- Tulis Banyak Register
Contoh permintaan:
{ "request": { "operation": "WriteMultipleRegistersRequest", "device": 1, "address": 1, "values": [20,30,10] }, "id": "TestRequest" }
Contoh respons:
{ "response": { "status": "success", "device": 1, "operation": "WriteMultipleRegistersRequest", "payload": { "function_code": 23, "address": 1, "count": 3 } }, "id" : "TestRequest" }
- Topeng Register Menulis
Contoh permintaan:
{ "request": { "operation": "MaskWriteRegisterRequest", "device": 1, "address": 1, "and_mask": 175, "or_mask": 1 }, "id": "TestRequest" }
Contoh respons:
{ "response": { "status": "success", "device": 1, "operation": "MaskWriteRegisterRequest", "payload": { "function_code": 22, "and_mask": 0, "or_mask": 8 } }, "id" : "TestRequest" }
- Baca Tulis Banyak Register
Contoh permintaan:
{ "request": { "operation": "ReadWriteMultipleRegistersRequest", "device": 1, "read_address": 1, "read_count": 2, "write_address": 3, "write_registers": [20,30,40] }, "id": "TestRequest" }
Contoh respons:
{ "response": { "status": "success", "device": 1, "operation": "ReadWriteMultipleRegistersRequest", "payload": { "function_code": 23, "registers": [10,20,10,20] } }, "id" : "TestRequest" }
catatan
Register kembali dalam respon ini adalah register yang dibaca dari.
Pengecualian dapat terjadi bila format permintaan valid, tetapi permintaan tersebut tidak berhasil diselesaikan. Dalam kasus ini, respons berisi informasi berikut:
status
ditetapkan keException
.function_code
sama dengan kode fungsi permintaan + 128.exception_code
berisi kode pengecualian. Untuk informasi selengkapnya, lihat kode pengecualian Modbus.
Contoh:
{
"response" : {
"status" : "fail",
"error_message": "Internal Error",
"error": "Exception",
"device": 1,
"operation": "ReadCoilsRequest",
"payload": {
"function_code": 129,
"exception_code": 2
}
},
"id" : "TestRequest"
}
Konektor ini melakukan pemeriksaan validasi pada permintaan Modbus. Sebagai contoh, ia memeriksa format yang tidak sah dan kolom yang hilang. Jika validasi gagal, konektor tidak akan mengirim permintaan. Sebaliknya, ia mengembalikan respon yang berisi informasi berikut:
Ini
status
diatur keNo Response
.Ini
error
berisi alasan untuk kesalahan.Ini
error_message
berisi pesan kesalahan.
Contoh:
{
"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 <type 'int'>, got <type 'str'>"
}
},
"id" : "TestRequest"
}
Jika permintaan menargetkan perangkat yang tidak ada atau jika jaringan Modbus RTU tidak berfungsi, Anda mungkin mendapatkan ModbusIOException
, yang menggunakan format No Response.
{
"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"
}
Contoh Penggunaan
Gunakan langkah-langkah tingkat tinggi berikut untuk mengatur contoh fungsi Lambda Python 3.7 yang dapat Anda gunakan untuk mencoba konektor.
catatan
-
Jika Anda menggunakan waktu aktif Python lainnya, Anda dapat membuat symlink dari Python3.x ke Python 3.7.
-
Topik Memulai dengan konektor (konsol) dan Memulai dengan konektor (CLI) berisi langkah-langkah terperinci yang menunjukkan cara mengonfigurasi dan men-deploy contoh konektor Notifikasi Twilio.
Pastikan Anda memenuhi persyaratan untuk konektor.
-
Buat dan terbitkan fungsi Lambda yang mengirimkan data input ke konektor.
Simpan kode contoh sebagai file PY. Unduh dan unzip AWS IoT Greengrass Core SDK for Python. Kemudian, buat paket zip yang berisi file PY dan folder
greengrasssdk
dalam tingkat root. Paket zip ini adalah paket deployment yang Anda unggah ke AWS Lambda.Setelah Anda membuat fungsi Lambda Python 3.7, terbitkankan versi fungsi dan buat alias.
-
Konfigurasikan grup Greengrass Anda.
-
Tambahkan fungsi Lambda dengan aliasnya (direkomendasikan). Konfigurasikan siklus hidup Lambda sebagai berumur panjang (atau
"Pinned": true
dalam CLI). -
Tambahkan sumber daya perangkat lokal yang diperlukan dan berikan akses baca/tulis ke fungsi Lambda.
-
Tambahkan konektor dan konfigurasikan parameter.
-
Tambahkan langganan yang mengizinkan konektor untuk menerima data input dan mengirim data output pada filter topik yang didukung.
Atur fungsi Lambda sebagai sumber, konektor sebagai target, dan gunakan filter topik input yang mendukung.
Atur konektor sebagai sumber, AWS IoT Core sebagai target, dan gunakan filter topik input yang mendukung. Anda menggunakan langganan ini untuk melihat pesan status di AWS IoT konsol.
-
-
Men-deploy grup.
-
Di AWS IoT konsol, pada halaman Uji, berlangganan topik data keluaran untuk melihat pesan status dari konektor. Contoh fungsi Lambda yang berumur panjang dan mulai mengirim pesan segera setelah grup dalam-deploy.
Setelah selesai pengujian, Anda dapat mengatur siklus hidup Lambda ke sesuai permintaan (atau
"Pinned": false
dalam CLI) dan men-deploy grup. Ini menghentikan fungsi dari mengirim pesan.
Contoh
Contoh fungsi Lambda berikut mengirimkan pesan input ke konektor.
import greengrasssdk
import json
TOPIC_REQUEST = 'modbus/adapter/request'
# Creating a greengrass core sdk client
iot_client = greengrasssdk.client('iot-data')
def create_read_coils_request():
request = {
"request": {
"operation": "ReadCoilsRequest",
"device": 1,
"address": 1,
"count": 1
},
"id": "TestRequest"
}
return request
def publish_basic_request():
iot_client.publish(payload=json.dumps(create_read_coils_request()), topic=TOPIC_REQUEST)
publish_basic_request()
def lambda_handler(event, context):
return
Lisensi
Konektor Adaptor Protokol Modbus-RTU mencakup perangkat lunak/lisensi pihak ketiga berikut:
Konektor ini dirilis di bawah Perjanjian Lisensi Perangkat lunak core Greengrass
Changelog
Tabel berikut menjelaskan perubahan dalam setiap versi konektor.
Versi |
Perubahan |
---|---|
3 |
Memperbarui waktu aktif Lambda untuk Python 3.7, yang mengubah persyaratan waktu aktif. |
2 |
Konektor ARN yang diperbarui untuk Wilayah AWS dukungan. Pencatatan kesalahan yang ditingkatkan. |
1 |
Pelepasan awal. |
Sebuah grup Greengrass dapat berisi hanya satu versi konektor pada suatu waktu. Untuk informasi lebih lanjut tentang pembaruan versi konektor, lihat Versi upgrade konektor.