İçindekiler:

ESP32 Modbus Master TCP: 7 Adım
ESP32 Modbus Master TCP: 7 Adım

Video: ESP32 Modbus Master TCP: 7 Adım

Video: ESP32 Modbus Master TCP: 7 Adım
Video: ESP32 MODBUS TCP Modbus Client communicate Modbus Server Modbus Tool Modbus Slave 2024, Kasım
Anonim
ESP32 Modbus Ana TCP
ESP32 Modbus Ana TCP

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 TCP Slave Simulator'u İndirin ve Başlatın
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

Bilgisayarınızı Cihaza Bağlanmaya Hazırlayın
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

Cihazı Hazırlayın ve Ona Bağlayın
Cihazı Hazırlayın ve Ona Bağlayın
Cihazı Hazırlayın ve Ona Bağlayın
Cihazı Hazırlayın ve Ona Bağlayın
Cihazı Hazırlayın ve Ona Bağlayın
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.

  1. Cihazı PC'ye bağlayın
  2. 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

Modbus Ana Kitaplığını Yükle
Modbus Ana Kitaplığını Yükle

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

Ağa Bağlan
Ağa Bağlan

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 Slave ile İletişimi Başlat
Modbus Slave ile İletişimi Başlat

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

Kayıtları Oku ve Yaz
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:

  1. read_coils
  2. read_discrete_inputs
  3. read_holding_registers
  4. read_input_registers
  5. write_single_coil
  6. 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: