Menghubungkan sensor industri Modbus dengan gerbang IIoT sumber terbuka
Aplikasi internet hal-hal industri (IIoT) biasanya memerlukan edge gateway untuk mengintegrasikan periferal Modbus dan perangkat lain, tetapi menerapkan gateway dapat memakan biaya dan waktu. Artikel ini menawarkan studi kasus tentang antarmuka sensor industri dengan kerangka kerja komputasi tepi sumber terbuka yang dapat menyederhanakan penerapan secara signifikan.
Teknologi Industrial Internet of Things (IIoT) berkembang pesat. Aplikasi IIoT di bidang pemantauan jarak jauh dan analitik tingkat lanjut merevolusi bisnis dan menawarkan manfaat yang patut dicontoh. Komputasi tepi biasanya terjadi langsung pada perangkat tempat sensor dipasang atau perangkat gerbang yang secara fisik dekat dengan sensor.
Dalam kasus penggunaan industri, di mana sejumlah sensor perlu dihubungkan dengan gateway tepi, arsitek solusi dan pengembang perlu memutuskan desain perangkat lunak dan pengembangan gateway tepi dan bagaimana memproses data dari berbagai sensor dan melakukan analitik data selama desain dan pengembangan fase. Dalam situasi seperti itu, jika tidak ada kerangka kerja sumber terbuka, pengembangan perangkat lunak baru, perbaikan bug dapat menghabiskan banyak upaya dan biaya.
Artikel pertama dalam seri dua bagian ini menjelaskan sensor industri dengan kasus penggunaan dan memberikan gambaran umum tentang persyaratan edge gateway bersama dengan diskusi tentang bagaimana persyaratan edge gateway dapat dipenuhi dengan EdgeX Foundry—kerangka kerja komputasi edge open source yang berfungsi sebagai edge middleware antara penginderaan fisik dan penggerak "sesuatu" dan sistem teknologi informasi (TI) (Gambar 1).
Gambar 1. EdgeX Foundry (Sumber:www.edgexfoundry.org)
Artikel ini menawarkan studi kasus tentang antarmuka sensor industri dengan EdgeX untuk mencapai fungsionalitas komputasi tepi.
Tujuan dari studi kasus ini adalah untuk mengevaluasi salah satu kerangka kerja komputasi tepi yang disebut EdgeX Foundry yang berjalan pada gateway Raspberry Pi dengan menghubungkan sensor suhu dan kelembaban industri. Berikut adalah blok tingkat tinggi dan diagram aliran data
yang menjelaskan studi kasus:
klik untuk gambar ukuran penuh
Gambar 2. Diagram Blok Tingkat Tinggi (Sumber:www.edgexfoundry.org)
Modbus
Modbus adalah protokol terbuka dan transportasi adalah standar. Itu tidak memerlukan lapisan fisik tertentu, tidak seperti banyak protokol berpemilik, jadi jaringan Modbus dibangun di atas infrastruktur yang murah dan umum seperti tautan RS-485.
Modbus mengimplementasikan representasi data yang sangat sederhana dan mudah dipahami. Tujuan utamanya hanyalah untuk memindahkan data antara perangkat master dan slave Modbus. Hanya ada dua jenis data untuk dipindahkan, register dan koil. Register adalah bilangan bulat tak bertanda 16-bit yang digunakan untuk menyimpan nilai analog seperti nilai suhu, kelembapan, dan tekanan. Kumparan adalah bit tunggal yang digunakan untuk menyimpan nilai digital dalam peta memori Modbus, biasanya nilai status seperti status sakelar (ON atau OFF), status motor berjalan (UP atau DOWN) dan status katup (OPEN atau CLOSE).
Ini membutuhkan sedikit ruang kode, seringkali hanya 1K. RAM bervariasi dengan ukuran ruang data Anda. Perangkat otomatisasi sederhana dengan sedikit data dapat diimplementasikan dengan hampir tidak ada ruang RAM.
Modbus bisa begitu mudah dipahami oleh non-programmer. Insinyur yang membuat mesin lem, meteran, alat pengukur, dan semacamnya dapat dengan mudah memahami konsep kumparan/register dan perintah sederhana untuk membaca dan menulisnya.
Seringkali beberapa instrumen terhubung ke jaringan Modbus yang sama. Tidak ada instrumen yang mendukung semua protokol jaringan instrumentasi, tetapi hampir semuanya mendukung Modbus. Dengan memilih Modbus, Anda memiliki peluang bagus untuk menghindari masalah kompatibilitas dan masalah peningkatan di masa mendatang.
Pemantauan Suhu
Sistem pemantauan suhu IoT memungkinkan industri untuk melacak parameter lingkungan pada platform berbasis web/seluler yang aman dan menawarkan pemberitahuan instan secara real-time. Data sensor suhu ini dapat diakses dari ujung jarak jauh.
Data yang dikumpulkan dari sensor suhu dapat digunakan untuk membuat wawasan statistik. Ini akan membantu industri meningkatkan keandalan gudang dan penyimpanan dingin mereka.
Banyak kasus penggunaan industri menggunakan aplikasi ini:
Pemantauan suhu digital di laboratorium dan klinik,
Kepatuhan terhadap keamanan pangan,
Manajemen Gudang dan Inventaris,
Barang dalam perjalanan,
Pemantauan peralatan.
Untuk kasus penggunaan seperti ini, aplikasi pemantauan suhu dan kelembaban sangat relevan. Aplikasi ini membutuhkan gateway untuk memonitor suhu dan kelembaban. Gateway membutuhkan kerangka kerja komputasi tepi. Di sini, sensor Modbus, gateway, dan kerangka kerja komputasi tepi yang digunakan adalah sensor suhu dan kelembaban industri SHT20, masing-masing Raspberry Pi 4 dan EdgeX Foundry.
Bagaimana Edgex digunakan?
Validasi Layanan Perangkat Modbus menggunakan Modbus Slave Simulator (ModbusPal)
ModbusPal adalah simulator budak Modbus, gratis dan open source, dirilis di bawah lisensi GPL. Tujuannya adalah untuk menawarkan antarmuka yang mudah digunakan dengan kemampuan untuk mereproduksi lingkungan Modbus yang kompleks dan realistis. Ini mendukung TCP/IP secara asli, dan mendukung komunikasi serial jika pustaka RxTx diinstal pada komputer.
ModbusPal dapat mensimulasikan hingga 247 budak Modbus. Setiap budak dapat memiliki register dan kumparan penahan. Setiap register atau koil dapat dianimasikan dengan dikaitkan ke generator nilai dinamis, yang disebut “otomatisasi”.
Validasi layanan perangkat modbus menggunakan simulator ModbusPal dengan perangkat budak sebagai pengukur daya dilakukan dengan mengikuti langkah-langkah yang disebutkan di bawah ini. Dengan cara yang sama, kita dapat mensimulasikan segala jenis lingkungan yang didukung Modbus dengan perangkat pendukung seperti sensor suhu, kelembapan, dan tekanan.
Mengatur lingkungan ModbusPal,
Menambahkan perangkat slave dan mengonfigurasi pengalamatan, nilai, dan otomatisasinya,
Memposting profil perangkat Modbus di EdgeX,
Memposting perangkat Modbus di EdgeX,
Mengirim data ke atau mengaktifkan perangkat budak (PUT),
Menerima data dari perangkat budak (GET).
Instal semua sistem operasi yang dapat menginstal docker dan docker-compose. Dalam contoh ini, kami menggunakan Ubuntu 20.04.2 LTS untuk menerapkan EdgeX menggunakan buruh pelabuhan.
Gambar 3. Menyiapkan lingkungan untuk ModbusPal Simulator
Tambahkan perangkat slave, konfigurasikan register penahan, masukkan nilai dan nama dan ikat ke otomatisasi yang sesuai.
Gambar 4. Menambah dan mengkonfigurasi perangkat slave di simulator ModbusPal (Sumber:www.edgexfoundry.org)
Posting profil perangkat menggunakan perintah POST.
curl –X POST http://
:48081/api/v1/deviceprofile/uploadfile -F file=@
Gambar 5. Memposting profil perangkat di EdgeX
Pos perangkat menggunakan perintah POST. Gunakan perintah di bawah ini untuk mengunggah sebagai file atau gunakan perintah yang merupakan tangkapan layar untuk mengunggah sebagai konten.
curl –X POST http://
:48081/api/v1/device/uploadfile -F “file=@”
Gambar 6. Memposting perangkat di EdgeX
Jalankan perintah PUT untuk mengirim data.
curl –X PUT http://
:48082/api/v1/device//command/ -H “Content-Type:application /json” –d '{“”:“”,“”:“”}'
Profil perangkat menjelaskan jenis perangkat dalam sistem EdgeX. Setiap perangkat yang dikelola oleh layanan perangkat memiliki asosiasi dengan profil perangkat, yang menentukan jenis perangkat tersebut dalam kaitannya dengan operasi yang didukungnya. Profil perangkat menentukan nilai perangkat dan metode operasi, yang dapat berupa Baca atau Tulis. Profil perangkat terdiri dari tag berikut:
Identifikasi: Profil berisi berbagai bidang identifikasi. Bidang Nama wajib diisi dan harus unik dalam penerapan EdgeX. Bidang lain bersifat opsional – bidang tersebut tidak digunakan oleh layanan perangkat tetapi dapat diisi untuk tujuan informasi,
Sumber Daya Perangkat: DeviceResource menentukan nilai sensor dalam perangkat yang dapat dibaca atau ditulis baik secara individual atau sebagai bagian dari deviceCommand. Ini memiliki nama untuk identifikasi dan deskripsi untuk tujuan informasi,
Perintah Perangkat: DeviceCommands menentukan akses untuk membaca dan menulis untuk beberapa sumber daya perangkat secara bersamaan. Setiap deviceCommand yang diberi nama harus berisi sejumlah get dan/atau set resourceOperations, yang menjelaskan pembacaan atau penulisan masing-masing,
Perintah Inti: CoreCommands menentukan perintah yang tersedia melalui layanan mikro perintah inti, untuk membaca dan menulis ke perangkat. DeviceResources dan deviceCommands keduanya dapat diwakili oleh coreCommands (nama coreCommand mengacu pada nama deviceCommand atau deviceResource).
Profil Perangkat Sensor Suhu dan Kelembaban Modbus(Gulir untuk melihat daftar lengkap)
nama :"SuhuHumiditySensor"produsen :"ROBOKITS"model :"RKI-4879"label :- "SHT20"deskripsi :"Pemancar Suhu &Kelembaban Kelas Industri Sensor SHT20 Pemantauan Presisi Tinggi Modbus RS485"sumber daya perangkat :- nama :"TemperatureDegC" deskripsi :"Suhu Ruangan dalam Derajat Celcius." atribut : { tabel utama :"INPUT_REGISTERS", startingAddress:"2", rawType:"INT16" } properti : nilai : { ketik :"Float32", readWrite:"R", scale:"0.1", floatEncoding:"eNotation" } unit : { ketik :"String", readWrite:"R", defaultValue:"derajat celsius" } - nama :"HumidityPercentRH" deskripsi :"Kelembaban Ruangan dalam %RH." atribut : { tabel utama :"INPUT_REGISTERS", startingAddress:"3", rawType:"INT16" } properti : nilai : { ketik :"Float32", readWrite:"R", scale:"0.1", floatEncoding:"eNotation" } unit : { ketik :"String", readWrite:"R", defaultValue:"%RH" }Perintah Perangkat :- nama :"TemperatureDegC" dapatkan : - { indeks :"1", operasi:"get", deviceResource:"TemperatureDegC" } - nama :"HumidityPercentRH" dapatkan : - { indeks :"2", operasi:"get", deviceResource:"HumidityPercentRH" }coreCommands :- nama :"TemperatureDegC" dapatkan : jalur :"/api/v1/device/{deviceId}/TemperatureDegC" tanggapan :- kode :"200" deskripsi :"Dapatkan suhu dalam derajat C" Nilai yang diharapkan :["TemperatureDegC"] - kode :"503" deskripsi :"layanan tidak tersedia" nilai yang diharapkan :[] - nama :"HumidityPercentRH" dapatkan : jalur :"/api/v1/device/{deviceId}/HumidityPercentRH" tanggapan :- kode :"200" deskripsi :"Dapatkan kelembapan dalam %RH" Nilai yang diharapkan :["HumidityPercentRH"] - kode :"503" deskripsi :"layanan tidak tersedia" nilai yang diharapkan :[]
1.1.1.1 Profil Perangkat Perangkat GPIO – 1 (LED Merah)(Gulir untuk melihat daftar lengkap)
nama :"device-gpio12"produsen :"Kecerdasan Jiangxing"model :"SP-01"label :- "gpio12"deskripsi :"ekspor gpio12 secara otomatis dengan perintah"deviceResources :- nama :"nilai" deskripsi :"setel atau dapatkan nilai gpio sistem" properti : nilai : { ketik :"Int8", readWrite:"RW", minimum:"0", maksimum:"1", nilai default:"0" } unit : { ketik :"String", readWrite:"R", defaultValue:"tinggi:1; rendah:0" }Perintah Perangkat :- nama :"nilai" dapatkan : - { operasi :"get", deviceResource:"value" } set : - { operasi :"set", deviceResource:"value", parameter:"0" }coreCommands :- nama :"nilai" taruh : jalur :"/api/v1/device/{deviceId}/value" parameterNames :["nilai"] tanggapan :- kode :"200" deskripsi :"" - kode :"500" deskripsi :"layanan tidak tersedia" nilai yang diharapkan :[] dapatkan : jalur :"/api/v1/device/{deviceId}/value" tanggapan :- kode :"200" deskripsi :"" Nilai yang diharapkan :["nilai"] - kode :"500" deskripsi :"layanan tidak tersedia" nilai yang diharapkan :[]
Profil Perangkat Perangkat GPIO – 2 (LED Biru)(Gulir untuk melihat daftar lengkap)
nama :"device-gpio14"produsen :"Kecerdasan Jiangxing"model :"SP-01"label :- "gpio14"deskripsi :"ekspor gpio14 secara otomatis dengan perintah"deviceResources :- nama :"nilai" deskripsi :"setel atau dapatkan nilai gpio sistem" properti : nilai : { ketik :"Int8", readWrite:"RW", minimum:"0", maksimum:"1", nilai default:"0" } unit : { ketik :"String", readWrite:"R", defaultValue:"tinggi:1; rendah:0" }Perintah Perangkat :- nama :"nilai" dapatkan : - { operasi :"get", deviceResource:"value" } set : - { operasi :"set", deviceResource:"value", parameter:"0" }coreCommands :- nama :"nilai" taruh : jalur :"/api/v1/device/{deviceId}/value" parameterNames :["nilai"] tanggapan :- kode :"200" deskripsi :"" - kode :"500" deskripsi :"layanan tidak tersedia" nilai yang diharapkan :[] dapatkan : jalur :"/api/v1/device/{deviceId}/value" tanggapan :- kode :"200" deskripsi :"" Nilai yang diharapkan :["nilai"] - kode :"500" deskripsi :"layanan tidak tersedia" nilai yang diharapkan :[]
Konfigurasi
File konfigurasi untuk menentukan perangkat dan menjadwalkan pekerjaan. Layanan mikro (mis., Device-modbus) menghasilkan instance relatif saat startup. Ini memiliki detail seperti jenis protokol, nama gateway, protokol, alamat, port, dan jalur (ID unit).
File Konfigurasi Sensor Suhu dan Kelembaban(Gulir untuk melihat daftar lengkap)
[Writable]LogLevel ='DEBUG'[Service]BootTimeout =30000CheckInterval ='10s'Host ='localhost'ServerBindAddr ='' # nilai kosong default ke Layanan .Host valuePort =49991Protocol ='http'StartupMsg ='modbus perangkat dimulai'Timeout =5000ConnectRetries =10Labels =[]EnableAsyncReadings =trueAsyncBufferSize =16[Registry]Host ='localhost'Port =8500Type ='consul'[Logging] ='./GPIO.LOG'[Clients] [Clients.Data] Protocol ='http' Host ='localhost' Port =48080 [Clients.Metadata] Protocol ='http' Host ='localhost' Port =48081 [Clients. Logging] Protocol ='http' Host ='localhost' Port =48061[Perangkat] DataTransform =true InitCmd ='' InitCmdArgs ='' MaxCmdOps =128 MaxCmdValueLen =256 RemoveCmd ='' RemoveCmdArgs ='' ProfilesDir ='./res' UpdateLastConnected =false# Tentukan Perangkat Sebelumnya[[DeviceList]] Name ='TemperatureHumiditySensor' # nama file profil perangkat Profile ='TemperatureH umiditySensor' Description ='Pemancar Suhu &Kelembaban Kelas Industri Sensor SHT20 Pemantauan Presisi Tinggi Modbus RS485' labels =[ 'TemperatureHumiditySensor','modbusRTU' ] [DeviceList.Protocols] [DeviceList.Protocols.modbus-rtu] Alamat ='/dev/ ttyUSB0' BaudRate ='9600' DataBits ='8' StopBits ='1' Parity ='N' UnitID ='1' [[DeviceList.AutoEvents]] Frequency ='5s' OnChange =false Resource ='TemperatureDegC' [[DeviceList .AutoEvents]] Frekuensi ='5s' OnChange =false Resource ='HumidityPercentRH'
File Konfigurasi Perangkat GPIO (LED Merah dan LED Biru)(Gulir untuk melihat daftar lengkap)
Hubungkan Pemancar Suhu dan Kelembaban Kelas Industri SHT20 ke Raspberry Pi (di mana EdgeX Foundry dipasang) melalui antarmuka RS485 ke konverter USB dan LED menggunakan jumper dan resistor seperti yang ditunjukkan pada gambar di bawah.
klik untuk gambar ukuran penuh
Gambar 9. Detail Konektivitas Perangkat Keras
Unggah profil perangkat di atas ke metadata dengan POST ke http://localhost:48081/api/v1/deviceprofile/uploadfile dan tambahkan file sebagai "file" kunci ke badan dalam format form-data, dan file yang dibuat ID akan dikembalikan. Contoh perintah berikut menggunakan curl untuk mengirim permintaan:
curl –X POST http://
:48081/api/v1/deviceprofile/uploadfile -F file=@
Pastikan semua layanan perangkat wajib aktif dan berjalan.
Gambar 10. Memverifikasi layanan perangkat aktif
c. Tambahkan perangkat dengan POST ke http://localhost:48081/api/v1/device, badan akan terlihat seperti:(Gulir untuk melihat daftar lengkap)
Perangkat dapat ditambahkan menggunakan perintah POST atau sebagai bagian dari file configuration.toml.
Layanan perangkat akan menarik data suhu dan kelembaban dari sensor setiap 5 detik. Data yang diterima akan dikirim ke layanan inti dan disimpan di server Redis.
TerkirimPenguraian kodeDiterimaPenguraian kode 01Slave ID 01Slave ID04Kode Fungsi 04Kode Fungsi00 01Alamat Register 02Bytes Hitungan00 01Jumlah Register 01 4dData (0x014d =333)60 0aCRC 78 95CRC
Layanan inti akan mengirimkan data ke layanan aplikasi. Gambar di bawah menunjukkan data dalam layanan inti.
Gambar 11. Data Suhu dan Kelembaban yang Disimpan di Layanan Inti
Layanan aplikasi mengirimkan data ke awan. Di sini kami menggunakan cloud IBM. Gambar di bawah menunjukkan data di cloud IBM.
klik untuk gambar ukuran penuh
Gambar 12. Data Suhu dan Kelembaban di IBM Cloud yang dikirim dari Layanan Aplikasi
Di sisi lain dari arah utara ke selatan, layanan aplikasi akan mengirimkan data ke mesin aturan (di sini kita menggunakan mesin aturan Kuiper). Aturan berikut ditetapkan.
Setiap kali suhu ambang batas terpenuhi, mesin aturan mengirimkan perintah ke perintah inti.
Perintah inti menggerakkan layanan perangkat GPIO untuk menghidupkan atau mematikan suhu ambang batas berbasis LED. Begitu kita menjalankan aturan, aturan akan diterapkan. Di sini gpio12 dimaksudkan untuk LED merah dan gpio14 untuk LED biru.
a. Nyalakan LED merah setiap kali suhu lebih tinggi dari 30 °C.
Log Mesin Aturan:
level=info msg="sink result for rule red_led_on:[{\"TemperatureDegC\":32.3}] file ="sinks/log_sink.go:16"rule=red_led_onlevel=info msg="sink result for rule blue_led_off:[{\"TemperatureDegC\":32.3}] file="sinks/log_sink.go:16"rule=blue_led_off
b. Menyala LED biru setiap kali suhu kurang dari 28 °C.
Mesin Aturan:
level=info msg="sink result for rule red_led_off:[{\"TemperatureDegC\":27.2}] file ="sinks/log_sink.go:16"rule=red_led_offlevel=info msg="hasil sink untuk aturan blue_led_on:[{\"TemperatureDegC\":27.2}] file="sinks/log_sink.go:16"rule=blue_led_on
Terakhir, layanan GPIO akan membuat LED menyala atau mati.
Kesimpulan
Industries are in the need of interfacing sensors and actuators and monitoring and controlling the environmental parameters for long term. The EdgeX framework enables the temperature and humidity monitoring application versatile, has enabled the controlled environment in industries, datacenters and laboratories. Interfacing any other industrial sensors with EdgeX Foundry will also work similar to industrial grade temperature and humidity sensor. This will save a huge amount of developer effort, development cost and latency as the EdgeX framework handles data storage, analytics, device management and cloud connectivity and gateway is very near to the sensors.
Acronyms
AcronymExpansion AOFAppend Only FileAPIApplication Program Interface AWSAmazon Web ServicesBACnetBuilding Automation and Control NetworkBLEBluetooth Low EnergyCURLClient Uniform Resource LocatorGPIOGeneral Purpose Input OutputHTTPHypertext Transfer ProtocolIBMInternational Business MachinesIIoTIndustrial Internet of ThingsIoTInternet of ThingsITInformation TechnologyLEDLight Emitting DiodeLTSLong Term SupportM2MMan to MachineMQTTMessage Queuing Telemetry TransportRDBRedis DatabaseRedisREmote DIctionary ServerRESTRepresentational State TransferRS-485Recommended Standard – 485SCADASupervisory Control and Data AcquisitionSQLStructured Query LanguageTCP/IPTransmission Control Protocol/Internet Protocol