Mục lục:

ESP32 Modbus Master TCP: 7 bước
ESP32 Modbus Master TCP: 7 bước

Video: ESP32 Modbus Master TCP: 7 bước

Video: ESP32 Modbus Master TCP: 7 bước
Video: Modbus Master Slave Communication Using Modbus Poll 2024, Tháng mười một
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

Trong lớp này, bạn sẽ lập trình bộ xử lý ESP32 thành Modbus TCP Master.

Chúng tôi sẽ sử dụng hai thiết bị chứa bộ xử lý này: Moduino ESP32 và Pycom. Cả hai thiết bị đều đang chạy trong môi trường MicroPytthon. Modbus Slave của chúng tôi sẽ là máy tính PC có phần mềm giả lập Modbus chạy trên đó.

Bạn sẽ cần:

  • Moduino ESP32 hoặc thiết bị Moduino Pycom (kiểm tra trang web này để tìm hiểu thêm về thiết bị Moduino ESP32 và điều này để kiểm tra thiết bị Pycom)
  • PC với hệ điều hành Linux
  • Cổng RS-232 / RS-485 trong máy tính của bạn hoặc bộ chuyển đổi USB sang RS-232 / RS-485

Bước 1: Tải xuống và khởi động Modbus TCP Slave Simulator

Tải xuống và khởi động Modbus TCP Slave Simulator
Tải xuống và khởi động Modbus TCP Slave Simulator

Tải xuống trình mô phỏng Modbus Slave từ https://www.modbusdriver.com/diagslave.html, sau đó mở kho lưu trữ đã tải xuống và giải nén phiên bản cho hệ điều hành Linux.

Chạy chương trình từ bảng điều khiển với đối số -p:

./diagslave -p

là một cổng nơi máy chủ Modbus Slave sẽ hoạt động. Đối với giao thức Modbus, theo mặc định, nó là 502, nhưng bạn có thể sử dụng một giao thức khác.

Trong Linux, các cổng dưới 1024 không thể được sử dụng bởi các chương trình chạy từ người dùng thông thường (không phải quyền root).

Hãy nhớ bạn đang sử dụng cổng nào. Giá trị này sẽ cần thiết sau này.

Bước 2: Chuẩn bị máy tính của bạn để kết nối với thiết bị

Chuẩn bị máy tính của bạn để kết nối với thiết bị
Chuẩn bị máy tính của bạn để kết nối với thiết bị

Bạn sẽ cần một số chương trình để tạo kết nối với thiết bị và gửi tệp đến thiết bị đó.

Cài đặt môi trường Python và pip (nếu bạn chưa có):

apt-get cài đặt python3

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

Cài đặt picocom:

apt-get cài đặt picocom

Chương trình này cần thiết để kết nối với thiết bị và thực hiện các lệnh trên thiết bị. Cài đặt mpfshell:

pip cài đặt mpfshell

Chương trình này cho phép bạn gửi các tập tin đến thiết bị.

Bạn cũng có thể cài đặt nó các nguồn biểu mẫu. Tham khảo trang này:

Bước 3: Chuẩn bị thiết bị và kết nối với nó

Chuẩn bị thiết bị và kết nối với nó
Chuẩn bị thiết bị và kết nối với nó
Chuẩn bị thiết bị và kết nối với nó
Chuẩn bị thiết bị và kết nối với nó
Chuẩn bị thiết bị và kết nối với nó
Chuẩn bị thiết bị và kết nối với nó

Để kết nối thiết bị Moduino hoặc Pycom với PC, bạn cần có cổng hoặc bộ chuyển đổi RS-232 / RS-485. Kiểm tra phiên bản thiết bị của bạn (loại cổng mà thiết bị sử dụng) và tìm cổng hoặc bộ chuyển đổi thích hợp.

  1. Kết nối thiết bị với PC
  2. Sau đó kết nối nguồn điện cho nó

Kết nối thiết bị với PC và sau đó kết nối nguồn điện cho nó. Bạn cũng có thể kết nối cáp ethernet với Moduino ESP32 (nếu nó có cổng đó).

Kết nối sẽ giống như trong các bức ảnh ở trên

Tìm đường dẫn cho cổng, được sử dụng để kết nối thiết bị, ví dụ: / dev / ttyS1, / dev / ttyUSB0.

Đối với bộ chuyển đổi USB, đường dẫn sẽ chứa từ USB.

Bạn có thể kết nối với thiết bị bằng chương trình picocom:

picocom / dev / ttyUSB0 -b 115200

Dấu nhắc lệnh của thiết bị trông tương tự như một trong những hình ảnh dưới đây.

Moduino ESP32: Xem tại đây

Moduino Pycom: Xem tại đây

Bước 4: Tải lên Thư viện Modbus Master

Tải lên Thư viện Modbus Master
Tải lên Thư viện Modbus Master

github.com/pycom/pycom-modbus/ Để giao tiếp với Modbus Slave, bạn cần có thư viện thích hợp. Các thư viện dành cho Pycom không tương thích với Moduino. Kiểm tra các hướng dẫn phù hợp với thiết bị của bạn.

Đóng picocom trước khi gửi tệp: nhấn Ctrl + A rồi nhấn Ctrl + X. phím.

thư viện uModBus cho Moduino ESP32 dựa trên thư viện pycom-modbus cho Moduino Pycom. Nó được sửa đổi để hoạt động trên thiết bị ESP32 thông thường. Nó cũng có các phương thức close () bổ sung cho các lớp trình kết nối.

1) Moduino ESP32

Tải xuống thư viện từ https://github.com/techbase123/micropython-modbus. Giải nén kho lưu trữ và gửi tất cả 4 tệp đến thiết bị Moduino.

Sử dụng mpfshell để tải chúng lên. Chạy chương trình này trong thư mục với các tệp đó.

Kết nối với thiết bị bằng cách thực hiện: NÀY

ttyUSB0 là tên của cổng nối tiếp nơi thiết bị được kết nối.

Thay đổi thư mục thành / flash / lib bằng lệnh:

cd / flash / lib

Đặt tất cả các tệp bằng các lệnh:

đặt uModBusConst.py

đặt uModBusFunctions.py đặt uModBusTCP.py đặt uModBusSerial.py

THÍ DỤ

Sau đó thoát khỏi bảng điều khiển bằng lệnh thoát và khởi động lại thiết bị bằng nút Đặt lại.

2) Moduino Pycom

Tải xuống thư viện từ https://github.com/pycom/pycom-modbus/. Giải nén kho lưu trữ và gửi nội dung của thư mục uModbus đến thiết bị. Sử dụng mpfshell để tải chúng lên. Chạy chương trình này trong thư mục với các tệp đó.

Kết nối với thiết bị bằng cách thực hiện:

mở ttyUSB0

ttyUSB0 là tên của cổng nối tiếp nơi thiết bị được kết nối.

Thay đổi thư mục thành / flash / lib, tạo thư mục uModbus và nhập nó bằng các lệnh:

cd / flash / libmd uModbus cd uModbus

Đặt tất cả các tệp bằng các lệnh:

đặt const.py

đặt functions.py đặt tcp.py đặt serial.py

Sau đó thoát khỏi bảng điều khiển bằng lệnh thoát và khởi động lại thiết bị bằng nút Đặt lại.

THÍ DỤ

Bước 5: Kết nối với mạng

Kết nối với mạng
Kết nối với mạng

Các lệnh thiết lập kết nối khác nhau giữa Moduino và Pycom.

Kết nối với thiết bị bằng picocom để thực hiện các lệnh thích hợp. Bạn có thể kết nối thiết bị Moduino với mạng bằng dây hoặc không dây. Các ví dụ sau giả định rằng mạng của bạn có máy chủ DHCP đang hoạt động.

Trong trường hợp khác, thiết bị sẽ không nhận được địa chỉ IP. Hỗ trợ WiFi có sẵn trong mọi Moduino. Cổng Ethernet là một tùy chọn và không phải thiết bị nào cũng có.

1) Moduino ESP32

Kết nối với WiFi

Thực hiện các lệnh sau trên thiết bị:

từ netWiFi nhập netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()

Thay ESSID bằng tên mạng WiFi của bạn và PASS bằng mật khẩu của mạng đó.

Sau một thời gian sau khi thực hiện start (), bạn sẽ nhận được một địa chỉ IP đã được gán cho thiết bị của bạn.

Kết nối với mạng Ethernet

Kết nối thiết bị với mạng có dây bằng cáp ethernet.

Sau đó thực hiện các lệnh sau:

từ netETH nhập netETHeth = netETH () eth.start ()

Sau một thời gian sau khi thực hiện start (), bạn sẽ nhận được địa chỉ IP đã được gán cho thiết bị của bạn.

2) Moduino Pycom

Kết nối với WiFi

Thực hiện các lệnh sau trên thiết bị:

from network import WLANwlan = WLAN (mode = WLAN. STA) nets = wlan.scan () cho net in nets: if net.ssid == 'ESSID': print ('Network found!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), timeout = 5000) khi không wlan.isconnected (): machine.idle () print ('Kết nối WLAN thành công!') ngắt

Thay ESSID bằng tên mạng WiFi của bạn và PASS bằng mật khẩu của mạng đó.

Bước 6: Khởi tạo giao tiếp với Modbus Slave

Khởi tạo giao tiếp với Modbus Slave
Khởi tạo giao tiếp với Modbus Slave

Thư viện Modbus Master tương tự cho cả hai thiết bị

Chúng khác nhau trong quá trình khởi tạo.

1) Khởi tạo uModBus trên Moduino ESP32

Hành hình:

từ uModBusTCP nhập uModBusTCP dưới dạng TCP

2) Khởi tạo uModBus trên Pycom

Hành hình:

từ uModbus.tcp nhập TCP

Mở kết nối

Sau đó, mở kết nối với:

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

ở đâu:

  • IP - địa chỉ ip của PC của bạn với trình mô phỏng Modbus Slave
  • PORT - cổng của Modbus Slave
  • 60 là thời gian chờ

Nếu lỗi sau xảy ra trong khi thực hiện các lệnh đọc / ghi: EXAMPLE

hành hình:

cho Moduino ESP32:

modbus.close ()

cho Moduino Pycom:

modbus._sock.close ()

và sau đó tạo lại kết nối:

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

Điều quan trọng là phải đóng ổ cắm trước khi tạo lại kết nối.

Bước 7: Đọc và ghi sổ đăng ký

Đọc và ghi sổ đăng ký
Đọc và ghi sổ đăng ký

Modbus hỗ trợ một số chức năng để đọc và ghi các thanh ghi.

Thư viện uModBus có phương thức cho mỗi chức năng:

  1. read_coils
  2. read_discrete_inputs
  3. read_holding_registers
  4. read_input_registers
  5. write_single_coil
  6. write_single_register

Đầu tiên, hãy viết một số giá trị.

1) Viết cuộn dây (func: 5)

Ghi 1 giá trị vào thanh ghi 200 từ nô lệ 1:

modbus.write_single_coil (1, 200, 0xFF00)

Đối số đầu tiên dành cho id nô lệ, trong trường hợp 1 của chúng tôi.

Thứ hai là số đăng ký và khát là một giá trị. Đối với 1, bạn phải đặt 0xFF00 ở đây. Ghi 0 đến 201 đăng ký từ nô lệ 1:

modbus.write_single_coil (1, 201, 0)

Phương thức này chỉ cho phép ghi các giá trị boolean: 0 hoặc 1.

2) Viết đăng ký (func: 6)

Bây giờ ghi một số giá trị số nguyên vào một số thanh ghi.

Viết giá trị 111 có dấu để đăng ký 100 từ nô lệ 1:

modbus.write_single_register (1, 100, 111, True)

Đối số đầu tiên là id nô lệ, số thanh ghi thứ hai và thứ ba là giá trị mới. Đối số cuối cùng xác định nếu giá trị nên được đặt là số có dấu. Giá trị mặc định cho nó là True. Bạn không cần phải thiết lập nó.

Ghi giá trị -457 có dấu vào thanh ghi 101 từ nô lệ 1:

modbus.write_single_register (1, 101, -457)

Ghi giá trị 50 chưa ký vào thanh ghi 100 từ nô lệ 3:

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

Phương thức này cho phép ghi các giá trị số nguyên vào một thanh ghi.

Thanh ghi đơn có thể chứa các giá trị 16 bit.

Phương thức trả về True là giá trị đầu vào hợp lệ và False nếu không. Giá trị được ghi ngay cả khi không hợp lệ (quá lớn so với đăng ký)

3) Đọc cuộn dây / đầu vào rời rạc

Bây giờ, hãy đọc các giá trị boolean đã viết. Để đọc thanh ghi với chức năng 1 cuộn đọc, hãy thực hiện:

modbus.read_coils (slaveId, register, count) [0: count]

Để đọc thanh ghi với chức năng 2, hãy đọc đầu vào rời rạc, thực hiện:

modbus.read_discrete_inputs (slaveId, register, count) [0: count]

ở đâu:

  • slave-id - id của nô lệ ảo (Trình mô phỏng nô lệ chấp nhận tất cả các id hợp lệ)
  • đăng ký - đăng ký số để đọc
  • đếm - số lượng đăng ký được đọc (đặt số lượng mong muốn ở cả hai nơi)

Các phương thức này trả về mảng với các giá trị boolean. Mỗi giá trị tương ứng với mỗi thanh ghi.

Đoạn: [0: count] là cần thiết vì phương thức này trả về nhiều giá trị hơn số đếm. Nó luôn trả về lượng giá trị chia hết cho 8. Các giá trị bổ sung là Sai và không tương ứng với bất kỳ thanh ghi nào.

Đọc các giá trị boolean của chúng tôi bằng cả hai phương pháp:

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

Kết quả sẽ như sau: EXAMPLE

Đúng là 1 giá trị, Sai là 0.

4) Đọc đăng ký

Bây giờ đọc các giá trị từ các thanh ghi được viết bằng hàm 6.

Để đọc các thanh ghi có chức năng 3 đọc các thanh ghi giữ, hãy thực hiện:

modbus.read_holding_registers (slaveId, đăng ký, đếm, đã ký = True)

Để đọc các thanh ghi có chức năng 4 đọc các thanh ghi đầu vào, hãy thực hiện:

modbus.read_input_registers (slaveId, đăng ký, đếm, đã ký = True)

ở đâu:

  • slave-id - id của nô lệ ảo
  • đăng ký - đăng ký số để đọc
  • count - số lượng đăng ký được đọc
  • có dấu - cho biết liệu các giá trị đọc có được coi là số có dấu hay không. Trạng thái mặc định: Đúng

Giá trị trả về là một bộ với số lượng thanh ghi mong muốn.

Đọc các đăng ký được đặt ở điểm trước:

modbus.read_holding_registers (1, 100, 2, True) modbus.read_input_registers (1, 100, 2, True) modbus.read_holding_registers (3, 100, 1, False) modbus.read_input_registers (3, 100, 1, False)

Kết quả sẽ giống như trong ảnh chụp màn hình này: EXAMPLE

Trong bài học tiếp theo, bạn sẽ học cách tạo Modbus RTU Master trên thiết bị hỗ trợ ESP32.

Đề xuất: