Mündəricat:

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

Video: ESP32 Modbus Master TCP: 7 addım

Video: ESP32 Modbus Master TCP: 7 addım
Video: Google Engineer Salary Levels #shorts 2024, Iyun
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

Bu sinifdə ESP32 prosessorunu Modbus TCP Master olaraq proqramlaşdıracaqsınız.

Bu prosessoru ehtiva edən iki cihazdan istifadə edəcəyik: Moduino ESP32 və Pycom. Hər iki cihaz MicroPytthon mühitində işləyir. Modbus Slave, üzərində işləyən Modbus simulator proqramı olan bir kompüter olacaq.

Sizə lazım olacaq:

  • Moduino ESP32 və ya Moduino Pycom cihazı (Moduino ESP32 cihazı haqqında daha çox məlumat əldə etmək üçün bu veb saytını yoxlayın və Pycom cihazını yoxlayın)
  • Linux əməliyyat sistemi olan kompüter
  • Kompüterinizdəki RS-232/RS-485 portu və ya USB-dən RS-232/RS-485 çeviricisi

Addım 1: Modbus TCP Slave Simulatorunu yükləyin və işə salın

Modbus TCP Slave Simulatorunu yükləyin və işə salın
Modbus TCP Slave Simulatorunu yükləyin və işə salın

Modbus Slave simulatorunu https://www.modbusdriver.com/diagslave.html saytından yükləyin. Sonra Linux əməliyyat sistemi üçün yüklənmiş arxivi açın və paketdən çıxarın.

Proqramı -p argumenti ilə konsoldan işə salın:

./diagslave -p

Modbus Slave serverinin işləyəcəyi bir limandır. Modbus protokolu üçün standart olaraq 502 -dir, ancaq başqa birini istifadə edə bilərsiniz.

Linux -da 1024 -dən aşağı olan portlar adi istifadəçidən işləyən proqramlar tərəfindən istifadə edilə bilməz (kök imtiyazları deyil).

Hansı portdan istifadə etdiyinizi xatırlayın. Bu dəyər daha sonra lazım olacaq.

Addım 2: Kompüterinizi Cihaza Bağlanmağa Hazırlayın

Kompüterinizi Cihaza Bağlanmağa Hazırlayın
Kompüterinizi Cihaza Bağlanmağa Hazırlayın

Cihazla əlaqə qurmaq və ona fayl göndərmək üçün bəzi proqramlara ehtiyacınız olacaq.

Python mühitini və pipini quraşdırın (yoxsa):

apt-get python3 quraşdırın

apt-get install python3-dev curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" python3 get-pip.py

Picocom quraşdırın:

apt-get picocom qurun

Bu proqram cihaza qoşulmaq və üzərindəki əmrləri yerinə yetirmək üçün lazımdır.

pip mpfshell qurun

Bu proqram faylları cihaza göndərməyə imkan verir.

Mənbə formalarından da quraşdıra bilərsiniz. Bu səhifəyə baxın:

Addım 3: Cihazı hazırlayın və ona qoşulun

Cihazı hazırlayın və ona qoşulun
Cihazı hazırlayın və ona qoşulun
Cihazı hazırlayın və ona qoşulun
Cihazı hazırlayın və ona qoşulun
Cihazı hazırlayın və ona qoşulun
Cihazı hazırlayın və ona qoşulun

Moduino və ya Pycom cihazını PC-yə bağlamaq üçün RS-232/RS-485 portuna və ya çeviriciyə ehtiyacınız var. Cihazınızın versiyasını (istifadə etdiyi port tipini) yoxlayın və uyğun port və ya çeviricini tapın.

  1. Cihazı PC -yə qoşun
  2. Sonra ona enerji təchizatı bağlayın

Cihazı PC -yə qoşun və sonra enerji təchizatı bağlayın. Ethernet kabelini Moduino ESP32 -ə də qoşa bilərsiniz (əgər bu port varsa).

Bağlantı yuxarıdakı fotoşəkillərdəki kimi olmalıdır

Cihaz bağlantısı üçün istifadə olunan port üçün yol tapın, məsələn: /dev /ttyS1, /dev /ttyUSB0.

USB çeviriciləri üçün yol USB sözünü ehtiva edir.

Picocom proqramı ilə cihaza qoşula bilərsiniz:

picocom /dev /ttyUSB0 -b 115200

Cihazın əmr istəyi aşağıdakı şəkillərdən birinə bənzəyir.

Moduino ESP32: Bura baxın

Moduino Pycom: Bura baxın

Addım 4: Modbus Master Kitabxanasını yükləyin

Modbus Master Kitabxanasını yükləyin
Modbus Master Kitabxanasını yükləyin

github.com/pycom/pycom-modbus/ Modbus Slave ilə ünsiyyət qurmaq üçün müvafiq kitabxanaya ehtiyacınız var. Pycom üçün kitabxanalar Moduino ilə uyğun gəlmir. Cihazınıza uyğun olan təlimatları yoxlayın.

Fayl göndərməzdən əvvəl picocomu bağlayın: Ctrl+A və sonra Ctrl+X düymələrini basın.

Moduino ESP32 üçün uModBus kitabxanası, Moduino Pycom üçün pycom-modbus kitabxanasına əsaslanır. Adi ESP32 cihazında işləmək üçün dəyişdirildi. Bağlayıcı siniflər üçün əlavə yaxın () üsulları da var.

1) Moduino ESP32

Kitabxananı https://github.com/techbase123/micropython-modbus saytından yükləyin. Arxivi açın və bütün 4 faylı Moduino cihazına göndərin.

Yükləmək üçün mpfshell istifadə edin. Bu proqramı həmin fayllarla birlikdə qovluqda işlədin.

İcra edərək cihaza qoşulun: BU

ttyUSB0, cihazın qoşulduğu serial portun adıdır.

Kataloqu /flash /lib olaraq dəyişdirin:

cd /flash /lib

Bütün faylları əmrlərlə yerləşdirin:

uModBusConst.py qoyun

uModBusFunctions.py qoy uModBusTCP.py qoy uModBusSerial.py qoy

NÜMUNƏ

Sonra çıxış əmri ilə konsoldan çıxın və sıfırlama düyməsini istifadə edərək cihazı yenidən başladın.

2) Moduino Pycom

Kitabxananı https://github.com/pycom/pycom-modbus/ saytından yükləyin. Arxivi açın və uModbus kataloqunun məzmununu cihaza göndərin. Yükləmək üçün mpfshell istifadə edin. Bu proqramı həmin fayllarla birlikdə qovluqda işlədin.

İcra edərək cihaza qoşulun:

ttyUSB0 açın

ttyUSB0, cihazın qoşulduğu serial portun adıdır.

Kataloqu /flash /lib olaraq dəyişdirin, uModbus qovluğu yaradın və əmrlərlə daxil edin:

cd /flash /libmd uModbus cd uModbus

Bütün faylları əmrlərlə yerləşdirin:

const.py qoyun

function.py qoyun tcp.py serial.py qoyun

Sonra çıxış əmri ilə konsoldan çıxın və sıfırlama düyməsini istifadə edərək cihazı yenidən başladın.

NÜMUNƏ

Addım 5: Şəbəkəyə qoşulun

Şəbəkəyə qoşulun
Şəbəkəyə qoşulun

Bağlantı qurmaq əmrləri Moduino və Pycom arasında fərqlənir.

Uyğun əmrləri yerinə yetirmək üçün picocom ilə cihaza qoşulun. Moduino cihazını tel və ya simsiz şəbəkəyə qoşa bilərsiniz. Aşağıdakı nümunələr şəbəkənizin DHCP serverinin işlədiyini güman edir.

Digər hallarda, cihaz IP ünvanı almır. Wi -Fi dəstəyi hər Moduinoda mövcuddur. Ethernet portu bir seçimdir və bütün cihazlarda yoxdur.

1) Moduino ESP32

WiFi -yə qoşulur

Cihazda aşağıdakı əmrləri yerinə yetirin:

netWiFi idxalından netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()

ESSID -i WiFi şəbəkənizin adı ilə, PASS -ı isə parolunuzla əvəz edin.

Start () icra etdikdən bir müddət sonra cihazınıza təyin edilmiş bir IP ünvanı almalısınız.

Ethernet şəbəkəsinə qoşulur

Ethernet kabeli ilə cihazı simli şəbəkəyə qoşun.

Sonra aşağıdakı əmrləri yerinə yetirin:

netETH idxalından netETHeth = netETH () eth.start ()

Start () icra etdikdən bir müddət sonra cihazınıza təyin edilmiş IP ünvanını almalısınız.

2) Moduino Pycom

WiFi -yə qoşulun

Cihazda aşağıdakı əmrləri yerinə yetirin:

şəbəkə idxalından WLANwlan = WLAN (mode = WLAN. STA) ağlar = wlan.scan () şəbəkələrdə şəbəkə üçün: əgər net.ssid == 'ESSID': çap etsəniz ('Şəbəkə tapıldı!') wlan.connect (net.ssid), auth = (net.sec, 'PASS'), zaman aşımı = 5000) wlan.isconnected () deyilkən: machine.idle () print ('WLAN bağlantısı uğurlandı!') fasilə

ESSID -i WiFi şəbəkənizin adı ilə, PASS -ı isə parolunuzla əvəz edin.

Addım 6: Modbus Slave ilə Əlaqəni Başlayın

Modbus Slave ilə Əlaqəni Başlatın
Modbus Slave ilə Əlaqəni Başlatın

Modbus Master kitabxanaları hər iki cihaz üçün oxşardır

Başlanğıcda fərqlənirlər.

1) Moduino ESP32 -də uModBus -u işə salın

İcra etmək:

uModBusTCP -dən uModBusTCP -ni TCP olaraq idxal edin

2) Pycom -da uModBus -u işə salın

İcra etmək:

uModbus.tcp -dən TCP idxal edin

Açıq əlaqə

Sonra əlaqəni açın:

modbus = TCP ('IP', PORT, 60)

harada:

  • Modbus Slave simulyatoru ilə kompüterinizin IP ünvanı
  • PORT - Modbus Slave limanı
  • 60 bir fasilədir

Oxuma/yazma əmrlərini yerinə yetirərkən aşağıdakı səhv baş verərsə: NÜMUNƏ

icra etmək:

Moduino ESP32 üçün:

modbus.close ()

Moduino Pycom üçün:

modbus._sock.close ()

və sonra əlaqəni yenidən qurun:

modbus = TCP ('IP', PORT, 60)

Əlaqəni yenidən yaratmadan əvvəl yuvanı bağlamaq vacibdir. Cihazın mövcud yuva bağlantısı məhduddur.

Addım 7: Qeydləri oxuyun və yazın

Qeydləri Oxuyun və Yazın
Qeydləri Oxuyun və Yazın

Modbus, qeydləri oxumaq və yazmaq üçün bir neçə funksiyanı dəstəkləyir.

uModBus kitabxanasının hər bir funksiya üçün metodu var:

  1. read_coils
  2. oxunan_fərqli_ girişlər
  3. read_holding_registers
  4. read_input_registers
  5. yazmaq_tək_bucaq
  6. yaz_single_register

Əvvəlcə bəzi dəyərləri yazaq.

1) Bobinlər yazın (funksiya: 5)

Kölə 1 -dən 200 qeydiyyata 1 dəyər yazın:

modbus.write_single_coil (1, 200, 0xFF00)

İlk arqument qul kimliyi üçündür, bizim vəziyyətimizdə 1.

İkincisi, qeyd nömrəsi və susuzluq bir dəyərdir. 1 üçün bura 0xFF00 qoymalısınız. Kölə 1 -dən 0 -a 201 qeydiyyat yazın:

modbus.write_single_coil (1, 201, 0)

Bu üsul yalnız boolean dəyərləri yazmağa imkan verir: 0 və ya 1.

2) Qeydlər yazın (funksiya: 6)

İndi bir neçə registrə bəzi tam ədədlər yazın.

Kölə 1 -dən 100 qeydiyyatdan keçmək üçün imzalanmış 111 dəyər yazın:

modbus.write_single_register (1, 100, 111, Doğru)

Birinci arqument kölə id, ikinci qeyd nömrəsi, üçüncüsü isə yeni dəyərdir. Varsayılan dəyər doğrudur. Bunu təyin etmək lazım deyil.

Kölə 1 -dən 101 qeydiyyata imzalı -457 dəyər yazın:

modbus.write_single_register (1, 101, -457)

Kölə 3 -dən 100 qeydiyyata imzasız 50 dəyər yazın:

modbus.write_single_register (3, 100, 50, False)

Bu üsul, tam ədədlərin tək qeydə yazılmasına imkan verir.

Tək reyestrdə 16 bit dəyər ola bilər.

Metod giriş dəyərinin doğru olduğunu, doğru olmadıqda doğru olduğunu qaytarır. Dəyər etibarsız olsa belə yazılır (qeyd üçün çox böyükdür)

3) Bobinləri/diskret girişləri oxuyun

İndi yazılmış boolean dəyərləri oxuyaq. Oxuma coil funksiyası 1 olan registri oxumaq üçün icra edin:

modbus.read_coils (slaveId, qeydiyyatdan keç, say) [0: say]

2 funksiyası olan qeyd oxumaq üçün diskret girişi oxuyun:

modbus.read_discrete_inputs (slaveId, qeydiyyatdan keç, say) [0: count]

harada:

  • slave -id - virtual qulun identifikatoru (Slave simulator bütün etibarlı idləri qəbul edir)
  • Qeydiyyat - oxumaq üçün qeydiyyat nömrəsi
  • say - oxunacaq qeydlərin sayı (hər iki yerə istədiyiniz məbləği qoyun)

Bu üsullar, boolean dəyərləri olan bir sıra qaytarır. Hər bir dəyər hər bir reyestrə uyğun gəlir.

Fraqment: [0: count] lazımdır, çünki bu metod saymaqdan daha çox dəyər qaytarır. Həmişə 8 -ə bölünən dəyərlərin miqdarını qaytarır. Əlavə dəyərlər Yanlışdır və heç bir reyestrə uyğun gəlmir.

Hər iki üsulla boolean dəyərlərimizi oxuyun:

modbus.read_coils (1, 200, 2) [0: 2] modbus.read_discrete_inputs (1, 200, 2) [0: 2]

Nəticə belə olacaq: NÜMUNƏ

Doğru 1 dəyərə, Yanlış 0 -a aiddir.

4) Qeydləri oxuyun

İndi 6 funksiyası ilə yazılmış qeydlərdən dəyərləri oxuyun.

3 funksiyası olan qeydləri oxumaq üçün qeyd qeydlərini oxumaq üçün icra edin:

modbus.read_holding_registers (slaveId, qeydiyyatdan keç, say, imzalanmış = Doğru)

4 funksiyası olan qeyd qeydlərini oxumaq üçün giriş qeydlərini oxuyun:

modbus.read_input_registers (slaveId, qeydiyyatdan keç, say, imzalanmış = Doğru)

harada:

  • slave -id - virtual qulun id
  • Qeydiyyat - oxumaq üçün qeydiyyat nömrəsi
  • count - oxunacaq qeydlərin sayı
  • imzalanmış - oxunan dəyərlərin imzalı nömrələr kimi qəbul edilməli olub -olmadığını göstərir. Varsayılan vəziyyət: Doğrudur

Qayıdış dəyəri, istədiyiniz miqdarda qeydləri olan bir dəstədir.

Əvvəlki nöqtədə qurulmuş qeydləri oxuyun:

modbus.read_holding_registers (1, 100, 2, True) modbus.read_input_registers (1, 100, 2, True) modbus.read_holding_registers (3, 100, 1, Yanlış)

Nəticələr bu ekran görüntüsündə olduğu kimi görünməlidir: ÖRNƏK

Növbəti dərsdə ESP32 ilə işləyən cihazda Modbus RTU Master yaratmağı öyrənəcəksiniz.

Tövsiyə: