Mục lục:
- Bước 1: Tải xuống và khởi động Modbus TCP Slave Simulator
- Bước 2: Chuẩn bị máy tính của bạn để kết nối với thiết bị
- Bước 3: Chuẩn bị thiết bị và kết nối với nó
- Bước 4: Tải lên Thư viện Modbus Master
- Bước 5: Kết nối với mạng
- Bước 6: Khởi tạo giao tiếp với Modbus Slave
- Bước 7: Đọc và ghi sổ đăng ký
Video: ESP32 Modbus Master TCP: 7 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:33
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 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ị
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ó
Để 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.
- Kết nối thiết bị với PC
- 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
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
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
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ý
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:
- read_coils
- read_discrete_inputs
- read_holding_registers
- read_input_registers
- write_single_coil
- 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:
HMI và Arduinos công nghiệp trong MODBUS RTU: 4 bước
HMI công nghiệp và Arduinos trong MODBUS RTU: Trong hướng dẫn này, tôi sẽ mô tả một ví dụ về giao tiếp giữa HMI công nghiệp (COOLMAY MT6070H, 150EUROS), Arduino CLONE DIY (10EUROS) và Arduino UNO (10EUROS). Mạng sẽ chạy theo một quy trình đặc biệt, mạnh mẽ và công nghiệp
Giao tiếp Modbus TCP giữa Arduino và các thiết bị công nghiệp: 3 bước
Giao tiếp Modbus TCP giữa Arduino và các thiết bị công nghiệp: Một cách công nghiệp để điều khiển bảng Arduino với HMI công nghiệp và liên kết nó với mạng công nghiệp bằng giao tiếp Modbus TCP
Bắt đầu với ESP32 - Cài đặt Bo mạch ESP32 trong Arduino IDE - Mã nhấp nháy ESP32: 3 bước
Bắt đầu với ESP32 | Cài đặt Bo mạch ESP32 trong Arduino IDE | ESP32 Blink Code: Trong phần hướng dẫn này, chúng ta sẽ thấy cách bắt đầu làm việc với esp32 và cách cài đặt bo mạch esp32 vào Arduino IDE và chúng ta sẽ lập trình esp 32 để chạy mã nháy bằng arduino Ide
Kết nối TCP / IP qua GPRS: Cách gửi dữ liệu đến máy chủ bằng mô-đun SIM900A: 4 bước
Kết nối TCP / IP qua GPRS: Cách gửi dữ liệu đến máy chủ bằng mô-đun SIM900A: Trong hướng dẫn này, tôi sẽ cho bạn biết về cách gửi dữ liệu đến máy chủ TCP bằng mô-đun sim900. Ngoài ra, chúng tôi sẽ xem cách chúng tôi có thể nhận dữ liệu từ máy chủ đến máy khách (mô-đun GSM)
Đồng hồ PZEM-004 + ESP8266 & Nền tảng IoT Node-RED & Modbus TCP / IP: 7 bước
Đồng hồ đo PZEM-004 + ESP8266 & Nền tảng IoT Node-RED & Modbus TCP / IP: Trong cơ hội này, chúng tôi sẽ tích hợp đồng hồ đo điện hoặc mức tiêu thụ điện đang hoạt động của mình, Pzem-004 - Peacefair với nền tảng tích hợp IoT Node-RED được sử dụng trong các hướng dẫn trước, chúng tôi sẽ sử dụng mô-đun ESP8266 được định cấu hình dưới dạng Modbus TCP / IP slave, sau này