Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Adaptor RTU protokol Modbus
Komponen adaptor RTU protokol Modbus (aws.greengrass.Modbus
) polling informasi dari perangkat RTU Modbus lokal.
Untuk meminta informasi dari RTU perangkat Modbus lokal dengan komponen ini, publikasikan pesan ke topik tempat komponen ini berlangganan. Dalam pesan, tentukan RTU permintaan Modbus untuk dikirim ke perangkat. Kemudian, komponen ini menerbitkan respons yang berisi hasil permintaan ModbusRTU.
catatan
Komponen ini menyediakan fungsionalitas yang mirip dengan konektor adaptor RTU protokol Modbus di AWS IoT Greengrass V1. Untuk informasi selengkapnya, lihat Konektor adaptor RTU protokol Modbus di Panduan Pengembang AWS IoT Greengrass V1.
Topik
Versi
Komponen ini memiliki versi berikut:
-
2.1.x
-
2.0.x
Tipe
Komponen ini adalah komponen Lambda () aws.greengrass.lambda
. Inti Greengrass menjalankan fungsi Lambda komponen ini menggunakan komponen peluncur Lambda.
Untuk informasi selengkapnya, lihat Jenis komponen.
Sistem operasi
Komponen ini hanya dapat diinstal pada perangkat inti Linux.
Persyaratan
Komponen ini memiliki persyaratan sebagai berikut:
-
Perangkat inti Anda harus memenuhi persyaratan untuk menjalankan fungsi Lambda. Jika Anda ingin perangkat inti untuk menjalankan fungsi Lambda kontainer, perangkat harus memenuhi persyaratan untuk melakukannya. Untuk informasi selengkapnya, lihat Persyaratan fungsi Lambda.
-
Python
versi 3.7 diinstal pada perangkat inti dan ditambahkan ke variabel lingkungan. PATH -
Koneksi fisik antara perangkat AWS IoT Greengrass inti dan perangkat Modbus. Perangkat inti harus terhubung secara fisik ke RTU jaringan Modbus melalui port serial, seperti USB port.
-
Untuk menerima data keluaran dari komponen ini, Anda harus menggabungkan pemutakhiran konfigurasi berikut untuk komponen router langganan lama (aws.greengrass.LegacySubscriptionRouter) saat menerapkan komponen ini. Konfigurasi ini menentukan topik di mana komponen ini menerbitkan tanggapan.
Untuk informasi selengkapnya, lihat Buat deployment.
-
Adaptor RTU protokol Modbus- didukung untuk berjalan di file. VPC
Dependensi
Saat Anda menerapkan komponen, gunakan AWS IoT Greengrass juga versi dependensinya yang kompatibel. Ini berarti bahwa Anda harus memenuhi persyaratan untuk komponen dan semua dependensinya untuk berhasil men-deploy komponen. Bagian ini berisi daftar dependensi untuk versi yang dirilis dari komponen ini dan kendala versi semantik yang menentukan versi komponen untuk setiap dependensi. Anda juga dapat melihat dependensi untuk setiap versi komponen di konsol AWS IoT Greengrass
Untuk informasi selengkapnya tentang dependensi komponen, lihat referensi resep komponen.
Konfigurasi
Komponen ini menyediakan parameter konfigurasi berikut yang dapat Anda sesuaikan ketika Anda men-deploy komponen.
catatan
Konfigurasi default komponen ini meliputi parameter fungsi Lambda. Kami sarankan Anda mengedit hanya parameter berikut untuk mengonfigurasi komponen ini pada perangkat Anda.
Data input
Komponen ini menerima parameter RTU permintaan Modbus pada topik berikut dan mengirimkan RTU permintaan Modbus ke perangkat. Secara default, komponen ini berlangganan topik publikasi/berlangganan lokal. Untuk informasi lebih lanjut tentang cara mempublikasikan pesan ke komponen ini dari komponen kustom Anda, lihat Pesan lokal publikasi/berlangganan.
Topik default (publish/subscribe lokal): modbus/adapter/request
Pesan menerima properti berikut. Pesan input harus dalam JSON format.
request
-
Parameter untuk RTU permintaan Modbus untuk dikirim.
Bentuk pesan permintaan tergantung pada jenis RTU permintaan Modbus yang diwakilinya. Properti berikut diperlukan untuk semua permintaan.
Jenis:
object
yang berisi informasi berikut:operation
-
Nama operasi yang akan dijalankan. Misalnya, tentukan
ReadCoilsRequest
untuk membaca kumparan pada perangkat ModbusRTU. Untuk informasi lebih lanjut tentang operasi tulis, lihat RTUPermintaan dan tanggapan Modbus.Tipe:
string
device
-
Perangkat target permintaan.
Nilai ini harus berupa bilangan bulat antara
0
dan247
.Tipe:
integer
Parameter lain yang akan tercakup dalam permintaan tergantung pada operasi. Komponen ini menangani pemeriksaan redundansi siklik (CRC)
untuk memverifikasi permintaan data untuk Anda. catatan
Jika permintaan Anda mencakup properti
address
, Anda harus menentukan nilainya sebagai bilangan bulat. Misalnya,"address": 1
. id
-
ID acak untuk permintaan. Gunakan properti ini untuk memetakan permintaan inpun untuk respons output. Ketika Anda menentukan properti ini, komponen menetapkan properti
id
di objek respons untuk nilai ini.Tipe:
string
contoh Contoh input: Baca permintaan kumparan
{ "request": { "operation": "ReadCoilsRequest", "device": 1, "address": 1, "count": 1 }, "id": "MyRequest" }
Data output
Komponen ini menerbitkan tanggapan sebagai data keluaran pada MQTT topik berikut secara default. Anda harus menentukan topik ini sebagai subject
dalam konfigurasi untuk komponen router langganan warisan. Untuk informasi lebih lanjut tentang cara mempublikasikan pesan ke komponen ini dari komponen kustom Anda, lihat Terbitkan/berlangganan pesan AWS IoT Core MQTT.
Topik default (AWS IoT Core MQTT): modbus/adapter/response
Bentuk pesan respon tergantung pada operasi permintaan dan status respon. Sebagai contoh, lihat Contoh permintaan dan respons.
Setiap respons mencakup properti berikut:
response
-
Respons dari RTU perangkat Modbus.
Jenis:
object
yang berisi informasi berikut:status
-
Status HTTP dari permintaan. Nilai bisa jadi salah satu dari yang berikut:
-
Success
— Permintaan itu valid, komponen mengirim permintaan ke jaringan Modbus, dan RTU jaringan Modbus RTU mengembalikan respons. -
Exception
— Permintaan itu valid, komponen mengirim permintaan ke jaringan Modbus, dan RTU jaringan Modbus RTU mengembalikan pengecualian. Untuk informasi selengkapnya, lihat Status respons: Pengecualian. -
No Response
— Permintaan tidak valid, dan komponen menangkap kesalahan sebelum mengirim permintaan ke jaringan RTU Modbus. Untuk informasi selengkapnya, lihat Status respon: Tidak ada respon.
-
operation
-
Operasi yang diminta komponen.
device
-
Perangkat tempat komponen mengirim permintaan.
payload
-
Respons dari RTU perangkat Modbus. Jika
status
adalahNo Response
, objek ini hanya akan berisi propertierror
dengan deskripsi kesalahan (misalnya,[Input/Output] No Response received from the remote unit
).
id
-
ID dari permintaan, yang dapat Anda gunakan untuk mengidentifikasi respons yang sesuai dengan yang diminta.
catatan
Sebuah respons untuk operasi write hanyalah pengulangan dari permintaan. Meskipun tanggapan write tidak mencakup informasi yang berarti, ia merupakan praktik yang baik untuk memeriksa status respons untuk melihat apakah permintaan berhasil atau gagal.
contoh Contoh output: Berhasil
{ "response" : { "status" : "success", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 1, "bits": [1] } }, "id" : "MyRequest" }
contoh Contoh output: Gagal
{ "response" : { "status" : "fail", "error_message": "Internal Error", "error": "Exception", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 129, "exception_code": 2 } }, "id" : "MyRequest" }
Untuk contoh lainnya, lihat Contoh permintaan dan respons.
RTUPermintaan dan tanggapan Modbus
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 kumparan
-
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 yang memiliki
-
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, "count": 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" }
- Tulis register tunggal
-
Contoh permintaan:
{ "request": { "operation": "WriteSingleRegisterRequest", "device": 1, "address": 1, "value": 1 }, "id": "TestRequest" }
- Tulis beberapa kumparan
-
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 beberapa 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" }
- Register mask write
-
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 beberapa 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
Tanggapan meliputi register yang dibaca komponen.
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:
-
status
ditetapkan keNo Response
. -
error
berisi alasan kesalahan. -
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 Expected <type 'int'>, got <type 'str'>" } }, "id": "TestRequest" }
Jika permintaan menargetkan perangkat yang tidak ada atau jika RTU jaringan Modbus tidak berfungsi, Anda mungkin mendapatkanModbusIOException
, 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" }
File log lokal
Komponen ini menggunakan file log berikut.
/logs/aws.greengrass.Modbus.log
/greengrass/v2
Untuk melihat log komponen ini
-
Jalankan perintah berikut pada perangkat inti untuk melihat file log komponen ini secara real time. Ganti
dengan jalur ke folder AWS IoT Greengrass root./greengrass/v2
sudo tail -f
/logs/aws.greengrass.Modbus.log/greengrass/v2
Lisensi
Komponen ini mencakup perangkat lunak/lisensi pihak ketiga berikut:
-
pymodbus/Lisensi
BSD -
pyserial/Lisensi
BSD
Komponen ini dirilis menurut Perjanjian Lisensi Perangkat Lunak Greengrass Core
Changelog
Tabel berikut menjelaskan perubahan dalam setiap versi komponen.
Versi |
Perubahan |
---|---|
2.1.9 |
Versi diperbarui untuk Greengrass nucleus versi 2.13.0 rilis. |
2.1.8 |
Versi diperbarui untuk Greengrass nucleus versi 2.12.0 rilis. |
2.1.7 |
Versi diperbarui untuk Greengrass nucleus versi 2.11.0 rilis. |
2.1.6 |
Versi diperbarui untuk Greengrass nucleus versi 2.10.0 rilis. |
2.1.5 |
|
2.1.4 |
Versi diperbarui untuk Greengrass nucleus versi 2.9.0 rilis. |
2.1.3 |
Versi diperbarui untuk Greengrass nucleus versi 2.8.0 rilis. |
2.1.2 |
Versi diperbarui untuk Greengrass nucleus versi 2.7.0 rilis. |
2.1.1 |
Versi diperbarui untuk Greengrass nucleus versi 2.6.0 rilis. |
2.1.0 |
|
2.0.8 |
Versi diperbarui untuk Greengrass nucleus versi 2.5.0 rilis. |
2.0.7 |
Versi diperbarui untuk Greengrass nucleus versi 2.4.0 rilis. |
2.0.6 |
Versi yang diperbarui untuk rilis inti Greengrass versi 2.3.0. |
2.0.5 |
Versi yang diperbarui untuk rilis inti Greengrass versi 2.2.0. |
2.0.4 |
Versi yang diperbarui untuk rilis inti Greengrass versi 2.1.0. |
2.0.3 |
Versi awal. |