İçindekiler:
- Adım 1: Modbus TCP Slave Simulator'u İndirin ve Başlatın
- 2. Adım: Bilgisayarınızı Cihaza Bağlanmaya Hazırlayın
- 3. Adım: Cihazı Hazırlayın ve Ona Bağlayın
- Adım 4: Modbus Ana Kitaplığını Yükleyin
- Adım 5: Ağa Bağlanın
- Adım 6: Modbus Slave ile İletişimi Başlatın
- Adım 7: Kayıtları Oku ve Yaz
Video: ESP32 Modbus Master TCP: 7 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Bu derste ESP32 işlemciyi Modbus TCP Master olacak şekilde programlayacaksınız.
Bu işlemciyi içeren iki cihaz kullanacağız: Moduino ESP32 ve Pycom. Her iki cihaz da MicroPytthon ortamında çalışmaktadır. Modbus Slave'imiz, üzerinde Modbus simülatör yazılımının çalıştığı bir PC bilgisayar olacaktır.
İhtiyacın olacak:
- Moduino ESP32 veya Moduino Pycom cihazı (Moduino ESP32 cihazı hakkında daha fazla bilgi edinmek için bu web sitesini ve Pycom cihazını kontrol etmek için bunu kontrol edin)
- Linux işletim sistemli bilgisayar
- Bilgisayarınızdaki RS-232/RS-485 bağlantı noktası veya USB'den RS-232/RS-485'e dönüştürücü
Adım 1: Modbus TCP Slave Simulator'u İndirin ve Başlatın
Modbus Slave simülatörünü https://www.modbusdriver.com/diagslave.html adresinden indirin. Ardından indirilen arşivi açın ve Linux işletim sistemi için paketi açın.
Programı -p argümanıyla konsoldan çalıştırın:
./diagslave -p
Modbus Slave sunucusunun çalışacağı bir porttur. Modbus protokolü için varsayılan olarak 502'dir, ancak başka bir tane kullanabilirsiniz.
Linux'ta 1024'ün altındaki bağlantı noktaları, normal kullanıcıdan (root ayrıcalıkları değil) çalıştırılan programlar tarafından kullanılamaz.
Hangi bağlantı noktasını kullandığınızı unutmayın. Bu değer daha sonra gerekli olacaktır.
2. Adım: Bilgisayarınızı Cihaza Bağlanmaya Hazırlayın
Cihazla bağlantı kurmak ve ona dosya göndermek için bazı programlara ihtiyacınız olacak.
Python ortamını ve pip'i kurun (eğer yoksa):
apt-get install python3
apt-get install python3-dev curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" python3 get-pip.py
picocom'u yükleyin:
apt-get install picocom
Bu program, cihaza bağlanmak ve üzerinde komutları çalıştırmak için gereklidir.mpfshell'i yükleyin:
pip yükleme mpfshell
Bu program, cihaza dosya göndermenizi sağlar.
Kaynaklardan da yükleyebilirsiniz. Bu sayfaya bakın:
3. Adım: Cihazı Hazırlayın ve Ona Bağlayın
Moduino veya Pycom cihazını PC'ye bağlamak için RS-232/RS-485 portuna veya dönüştürücüye ihtiyacınız vardır. Cihazınızın sürümünü (hangi bağlantı noktası türünü kullanır) kontrol edin ve uygun bağlantı noktası veya dönüştürücüyü bulun.
- Cihazı PC'ye bağlayın
- Ardından güç kaynağını ona bağlayın
Cihazı PC'ye bağlayın ve ardından güç kaynağını ona bağlayın. Ethernet kablosunu Moduino ESP32'ye de bağlayabilirsiniz (eğer bu bağlantı noktasına sahipse).
Bağlantı yukarıdaki fotoğraflardaki gibi olmalıdır
Aygıt bağlantısı için kullanılan bağlantı noktası yolunu bulun. Örneğin: /dev/ttyS1, /dev/ttyUSB0.
USB dönüştürücüler için yol, USB kelimesini içerecektir.
Picocom programı ile cihaza bağlanabilirsiniz:
picocom /dev/ttyUSB0 -b 115200
Aygıtın komut istemi aşağıdaki resimlerden birine benziyor.
Moduino ESP32: Buraya bakın
Moduino Pycom: Buraya bakın
Adım 4: Modbus Ana Kitaplığını Yükleyin
github.com/pycom/pycom-modbus/Modbus Slave ile iletişim kurmak için uygun kütüphaneye ihtiyacınız var. Pycom kitaplıkları Moduino ile uyumlu değildir. Cihazınıza uygun talimatları kontrol edin.
Dosyaları göndermeden önce picocom'u kapatın: Ctrl+A ve ardından Ctrl+X tuşlarına basın.
Moduino ESP32 için uModBus kitaplığı, Moduino Pycom için pycom-modbus kitaplığını temel alır. Normal ESP32 cihazında çalışacak şekilde değiştirildi. Ayrıca bağlayıcı sınıfları için ek close() yöntemlerine sahiptir.
1) Moduino ESP32
Kütüphaneyi https://github.com/techbase123/micropython-modbus adresinden indirin. Arşivi açın ve 4 dosyayı da Moduino cihazına gönderin.
Bunları yüklemek için mpfshell kullanın. Bu programı o dosyalarla dizinde çalıştırın.
Aşağıdakileri yürüterek cihaza bağlanın: BU
ttyUSB0, cihazın bağlı olduğu seri bağlantı noktasının adıdır.
Dizini şu komutla /flash/lib olarak değiştirin:
cd /flash/lib
Tüm dosyaları komutlarla koyun:
uModBusConst.py'yi koyun
uModBusFunctions.py'yi koyun uModBusTCP.py'yi koyun uModBusSerial.py'yi koyun
ÖRNEK
Daha sonra çıkış komutu ile konsoldan çıkın ve Reset butonu ile cihazı yeniden başlatın.
2) Moduino Pycom
github.com/pycom/pycom-modbus/ adresinden kitaplığı indirin. Arşivi paketinden çıkarın ve uModbus dizininin içeriğini cihaza gönderin. Yüklemek için mpfshell kullanın. Bu programı o dosyalarla dizinde çalıştırın.
Aşağıdakileri yürüterek cihaza bağlanın:
ttyUSB0'ı aç
ttyUSB0, cihazın bağlı olduğu seri bağlantı noktasının adıdır.
Dizini /flash/lib olarak değiştirin, uModbus dizini oluşturun ve komutlarla girin:
cd /flash/libmd uModbus cd uModbus
Tüm dosyaları komutlarla koyun:
const.py koy
function.py koy tcp.py koy serial.py koy
Daha sonra çıkış komutu ile konsoldan çıkın ve Reset butonu ile cihazı yeniden başlatın.
ÖRNEK
Adım 5: Ağa Bağlanın
Moduino ve Pycom arasında bağlantı kurma komutları farklılık gösterir.
Uygun komutları yürütmek için cihaza picocom ile bağlanın. Moduino cihazını ağa kablolu veya kablosuz olarak bağlayabilirsiniz. Aşağıdaki örnekler, ağınızın çalışan DHCP sunucusuna sahip olduğunu varsayar.
Diğer durumda cihaz IP adresi alamaz. Her Moduino'da WiFi desteği mevcuttur. Ethernet bağlantı noktası bir seçenektir ve tüm cihazlarda bulunmaz.
1) Moduino ESP32
WiFi'ye bağlanma
Cihazda aşağıdaki komutları yürütün:
netWiFi'den içe aktar netWiFiwifi = netWiFi(netWiFi. WIFI_STA, 'ESSID', 'PASS')wifi.start()
ESSID'yi WiFi ağınızın adıyla ve PASS'ı parolasıyla değiştirin.
start()'ı yürüttükten bir süre sonra, cihazınıza atanmış bir IP adresi almalısınız.
Ethernet ağına bağlanma
Cihazı ethernet kablosuyla kablolu ağa bağlayın.
Ardından aşağıdaki komutları yürütün:
netETH'den içe aktar netETHeth = netETH()eth.start()
start()'ı yürüttükten bir süre sonra, cihazınıza atanan IP adresini almalısınız.
2) Moduino Pycom
WiFi'ye bağlan
Cihazda aşağıdaki komutları yürütün:
ağdan içe aktar WLANwlan = WLAN(mode=WLAN. STA) nets = ağlar için wlan.scan():if net.ssid == 'ESSID': print('Ağ bulundu!') wlan.connect(net.ssid, auth=(net.sec, 'PASS'), timeout=5000 wlan.isconnected() değilken: machine.idle() print('WLAN bağlantısı başarılı!') break
ESSID'yi WiFi ağınızın adıyla ve PASS'ı parolasıyla değiştirin.
Adım 6: Modbus Slave ile İletişimi Başlatın
Modbus Master kitaplıkları her iki cihaz için de benzerdir
Başlatmada farklılık gösterirler.
1) Moduino ESP32'de uModBus'u başlatın
Uygulamak:
uModBusTCP'den uModBusTCP'yi TCP olarak içe aktarın
2) Pycom'da uModBus'u başlatın
Uygulamak:
uModbus.tcp'den TCP'yi içe aktarın
Bağlantıyı aç
Ardından bağlantıyı şununla açın:
modbus=TCP('IP', PORT, 60)
nerede:
- Modbus Slave simülatörü ile PC'nizin IP - ip adresi
- PORT - Modbus Slave portu
- 60 bir zaman aşımı
Okuma/yazma komutları yürütülürken aşağıdaki hata oluşursa: ÖRNEK
uygulamak:
Moduino ESP32 için:
modbus.kapat()
Moduino Pycom için:
modbus._sock.close()
ve ardından bağlantıyı yeniden oluşturun:
modbus=TCP('IP', PORT, 60)
Bu, bağlantıyı yeniden oluşturmadan önce soketi kapatmak için önemlidir. Cihazda sınırlı sayıda kullanılabilir soket bağlantısı vardır.
Adım 7: Kayıtları Oku ve Yaz
Modbus, kayıtları okumak ve yazmak için çeşitli işlevleri destekler.
uModBus kütüphanesinin her fonksiyon için bir metodu vardır:
- read_coils
- read_discrete_inputs
- read_holding_registers
- read_input_registers
- write_single_coil
- write_single_register
Öncelikle bazı değerler yazalım.
1) Bobinleri yazın (fonk: 5)
Slave 1'den 200 register'a 1 değer yazın:
modbus.write_single_coil(1, 200, 0xFF00)
İlk argüman bizim durumumuzda köle kimliği içindir.
İkincisi kayıt numarası ve bu bir değerdir. 1 için buraya 0xFF00 koymalısınız. Köle 1'den 0 ila 201 kaydı yazın:
modbus.write_single_coil(1, 201, 0)
Bu yöntem yalnızca boole değerlerinin yazılmasına izin verir: 0 veya 1.
2) Kayıtları yaz (fonk: 6)
Şimdi birkaç kayıt için bazı tamsayı değerleri yazın.
Köle 1'den 100'ü kaydetmek için imzalı 111 değeri yazın:
modbus.write_single_register(1, 100, 111, Doğru)
İlk argüman slave id, ikinci kayıt numarası ve üçüncüsü yeni değerdir. Son argüman, değerin imzalı sayı olarak ayarlanması gerekip gerekmediğini tanımlar. Bunun için varsayılan değer True'dur. Ayarlamanıza gerek yok.
Slave 1'den 101 register'a imzalı -457 değeri yazın:
modbus.write_single_register(1, 101, -457)
Slave 3'ten 100 register'a imzalanmamış 50 değeri yazın:
modbus.write_single_register(3, 100, 50, Yanlış)
Bu yöntem, tamsayı değerlerinin tek bir kayıt defterine yazılmasına izin verir.
Tek kayıt 16 bitlik değerler içerebilir.
Yöntem, giriş değeri geçerliyse True, değilse False değerini döndürür. Değer geçersiz olsa bile yazılır (kayıt için çok büyük)
3) Bobinleri/ayrık girişleri okuyun
Şimdi yazılı boole değerlerini okuyalım. Fonksiyon 1 okuma bobini ile kaydı okumak için şunu yürütün:
modbus.read_coils(slaveId, kayıt, sayım)[0:count]
2 okuma ayrık girişi ile kaydı okumak için şunu yürütün:
modbus.read_discrete_inputs(slaveId, kayıt, sayım)[0:say]
nerede:
- köle kimliği - sanal köle kimliği (Köle simülatörü tüm geçerli kimlikleri kabul eder)
- kayıt - okumak için kayıt numarası
- count - okunacak kayıt sayısı (istediğiniz miktarı her iki yere de koyun)
Bu yöntemler, boole değerleriyle dizi döndürür. Her değer, her kayda karşılık gelir.
Parça: [0:say] gereklidir, çünkü bu yöntem sayımdan daha fazla değer döndürür. Her zaman 8'e bölünebilen değerlerin miktarını döndürür. Ek değerler False'dır ve herhangi bir kayda karşılık gelmez.
Boole değerlerimizi her iki yöntemle de okuyun:
modbus.read_coils(1, 200, 2)[0:2]modbus.read_discrete_inputs(1, 200, 2)[0:2]
Sonuç aşağıdaki gibi olacaktır: ÖRNEK
True 1 değerini, False ise 0 değerini ifade eder.
4) Kayıtları oku
Şimdi 6 fonksiyon ile yazılmış registerlardan değerleri okuyunuz.
3 tutma kayıtlarını oku işlevine sahip kayıtları okumak için şunu yürütün:
modbus.read_holding_registers(slaveId, kayıt, sayım, imzalı=Doğru)
Fonksiyon 4 ile giriş kayıtlarını okumak için kayıtları okumak için şunu yürütün:
modbus.read_input_registers(slaveId, kayıt, sayım, imzalı=Doğru)
nerede:
- köle kimliği - sanal köle kimliği
- kayıt - okumak için kayıt numarası
- count - okunacak kayıt sayısı
- imzalı - okunan değerlerin imzalı sayılar olarak ele alınıp alınmayacağını belirtir. Varsayılan durum: Doğru
Dönüş değeri, istenen miktarda kayıt içeren bir tanımlama grubudur.
Önceki noktada ayarlanan kayıtları okuyun:
modbus.read_holding_registers(1, 100, 2, True)modbus.read_input_registers(1, 100, 2, True)modbus.read_holding_registers(3, 100, 1, Yanlış)modbus.read_input_registers(3, 100, 1, Yanlış)
Sonuçlar şu ekran görüntüsündeki gibi görünmelidir: ÖRNEK
Bir sonraki derste, ESP32 özellikli cihazda Modbus RTU Master'ın nasıl oluşturulacağını öğreneceksiniz.
Önerilen:
MODBUS RTU'da Endüstriyel HMI ve Arduinos: 4 Adım
MODBUS RTU'da Endüstriyel HMI ve Arduinos: Bu talimatta, endüstriyel bir HMI (COOLMAY MT6070H, 150EUROS), bir Arduino CLONE DIY (10EUROS) ve bir Arduino UNO (10EUROS) arasındaki bir iletişim örneğini anlatacağım. Ağ, özel, sağlam ve endüstriyel bir protokol altında çalışacak
Arduino ve Endüstriyel Cihazlar Arasında Modbus TCP İletişimi: 3 Adım
Arduino ve Endüstriyel Cihazlar Arasında Modbus TCP İletişimi: Bir Arduino kartını endüstriyel HMI ile kontrol etmenin ve bir Modbus TCP iletişimi ile endüstriyel bir ağa bağlamanın endüstriyel bir yolu
ESP32'ye Başlarken - Arduino IDE'de ESP32 Kartlarının Kurulması - ESP32 Yanıp Sönme Kodu: 3 Adım
ESP32'ye Başlarken | Arduino IDE'de ESP32 Kartlarının Kurulması | ESP32 Yanıp Sönme Kodu: Bu talimatta, esp32 ile çalışmaya nasıl başlayacağımızı ve esp32 kartlarının Arduino IDE'ye nasıl kurulacağını göreceğiz ve esp 32'yi arduino ide kullanarak yanıp sönme kodunu çalıştıracak şekilde programlayacağız
GPRS Üzerinden TCP/IP Bağlantısı: SIM900A Modülü Kullanılarak Sunucuya Nasıl Veri Gönderilir: 4 Adım
GPRS Üzerinden TCP/IP Bağlantısı: SIM900A Modülünü Kullanarak Sunucuya Nasıl Veri Gönderilir: Bu dersimizde sizlere sim900 modülü kullanılarak TCP sunucusuna nasıl veri gönderileceğini anlatacağım. Ayrıca sunucudan istemciye nasıl veri alabileceğimizi göreceğiz (GSM modülü)
Sayaç PZEM-004 + ESP8266 & Platform IoT Node-RED & Modbus TCP/IP: 7 Adım
Metre PZEM-004 + ESP8266 & Platform IoT Node-RED & Modbus TCP/IP: Bu fırsatta aktif güç ölçer veya elektrik tüketimimiz Pzem-004 - Peacefair'i önceki eğitimlerde kullanılan IoT Node-RED entegrasyon platformu ile entegre edeceğiz, Modbus TCP/IP slave olarak konfigüre edilmiş bir ESP8266 modülü kullanacağız, daha sonra